2010-03-24 45 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, 
      ) 
    ); 
}