2010-03-24 76 views
1

我正在爲我們的CakePHP的CMS將要處理的博客插件。當獲得的標籤,我需要設置爲唯一=假HABTM關係能夠添加標籤來後,無需重新設置他們。使用HABTM關係,以虛假

博客帖子模型看起來像這樣

class BlogPost extends AppModel { 
    var $name = 'BlogPost'; 
    var $actsAs = array('Core.WhoDidIt', 'Containable'); 
    var $hasMany = array('Blog.BlogPostComment'); 
    var $hasAndBelongsToMany = array('Blog.BlogTag' => array('unique' => false), 'Blog.BlogCategory'); 
} 

的BlogTag模型看起來像這樣

class BlogTag extends AppModel { 
    var $name = 'BlogTag'; 
    var $actsAs = array('Containable'); 
    var $hasAndBelongsToMany = array('Blog.BlogPost'); 
} 

SQL錯誤我收到的時候我在的HABTM關係的獨特=> true設置BlogPost和BlogTag是

Query: SELECT `Blog`.`BlogTag`.`id`, `Blog`.`BlogTag`.`name`, `Blog`.`BlogTag`.`slug`, `Blog`.`BlogTag`.`created_by`, `Blog`.`BlogTag`.`modified_by`, `Blog`.`BlogTag`.`created`, `Blog`.`BlogTag`.`modified`, `BlogPostsBlogTag`.`blog_post_id`, `BlogPostsBlogTag`.`blog_tag_id` FROM `blog_tags` AS `Blog`.`BlogTag` JOIN `blog_posts_blog_tags` AS `BlogPostsBlogTag` ON (`BlogPostsBlogTag`.`blog_post_id` = 4 AND `BlogPostsBlogTag`.`blog_tag_id` = `Blog`.`BlogTag`.`id`) 

正如你可以看到它試圖設置blog_tags表 '博客'。「BlogTag。這不是有效的MySQL名稱。

當我刪除了獨特=>從這種關係中真正的所有作品找到我還能再救一個標籤,但添加另一個時,它只是刪除了第一個,並把它的位置在新的。

有沒有人有任何想法?這是一個錯誤還是我錯過了一些東西?

乾杯, 院長

回答

0

院長

所以你有表blog_posts_blog_tags?

引述上HABTM關係

我們需要建立一個額外的數據庫中的表來處理HABTM協會CakePHP的文獻。這種新的連接表的名稱需要包括涉及,按字母順序排列兩種模型的名稱,並用下劃線(_)分隔。

所以(放棄對可讀性博客位!),你需要你的職位表,你的標籤表,你posts_tags表,然後在HABTM定義是

class Post extends AppModel { 
    var $name = 'Post'; 
    var $hasAndBelongsToMany = array(
     'Tag' => 
      array(
       'className'    => 'Tag', 
       'joinTable'    => 'posts_tags', 
       'foreignKey'    => 'post_id', 
       'associationForeignKey' => 'tag_id', 
       'unique'     => true, 
      ) 
    ); 
}