我正在开发一个用于处理博客的CakePHP CMS的插件。在获取标签时,我需要将HABTM关系设置为unique = false,以便能够将标签添加到帖子而无需全部重置。
BlogPost模型看起来像这样
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');
}
当我拥有unique =>时出现的SQL错误BlogPost和BlogTag之间的HABTM关系中的真实设置是
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表设置为'Blog'。'BlogTag。这不是一个有效的MySQL名称。
当我删除unique =>从所有工作的关系中找到真实的,我可以保存一个标签,但是当添加另一个标签时,它只删除第一个标签并将新标签放置到位。
有没有人有任何想法?这是一个错误还是我错过了什么?
干杯, 迪安
答案 0 :(得分:0)
迪安
那么你有表blog_posts_blog_tags吗?
引用关于HABTM关系的CakePHP文献
我们需要在数据库中设置一个额外的表来处理HABTM关联。这个新的连接表的名称需要包括所涉及的两个模型的名称,按字母顺序排列,并用下划线(_)分隔。
所以(为了便于阅读,删除了博客位!)你需要你的帖子表,你的标签表和你的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,
)
);
}