我正在尝试使用以下代码行来过滤所有具有某些(不相关)条件的帖子,标签为“who”
$ com = $ this-> Post-> find('all',array('conditions'=> $ conditions,'contains'=>'Tag.tag =“who”'));
然而,不是结果只是带有标签的帖子,我得到的每个帖子都带有空标签数组,用于那些没有标签“who”的帖子。
我知道我的问题已经出现过了,但是发布的解决方案并没有使用我的代码。 我试过在这里修改我自己的代码: http://web-development-blog.co.uk/2010/09/14/cakephp-habtm-find-with-conditions-and-containable-behavior/,但是我收到一条SQL错误,指出在on子句中找不到“Tag.post_id”。
请帮忙。
尝试从所选链接实现代码时出现错误消息:
SELECT `Post`.`id`, `Post`.`title`, `Post`.`body`, `Post`.`created`, `Post`.`modified`, `Tag`.`id`, `Tag`.`tag`, `Tag`.`created`, `Tag`.`modified` FROM `posts` AS `Post` LEFT JOIN `tags` AS `Tag` ON (`Tag`.`post_id` = `Post`.`id`) WHERE `Tag`.`tag` = 'who' 1054: Unknown column 'Tag.post_id' in 'on clause'
这是由于使用它引起的:
$this->Post->bindModel(array('hasOne' => array('Tag')));
$this->Post->contain(array(
'Tag'
));
$com=$this->Post->find('all', array(
'conditions'=>array('Tag.tag'=>'who')
));
答案 0 :(得分:0)
你的错误是你正在使用bindModel而不是说外键或任何东西,你应该在模型中建立关联,并在严格需要时使用这种即时方法。
你需要告诉蛋糕哪个非蛋糕的外键会使用默认值,在你的情况下它会尝试Tag.post_id。
另外你应该使用一个有很多联想或者至少我是这么认为的。我说这是因为我认为帖子可能有多个标签。
在模型中执行asociation并删除此行
$ this-> Post-> bindModel(array('hasOne'=> array('Tag')));
它应该完美地运作
或者你可以动态地使用正确的参数进行关联阅读cookbook为此,显示如何放置类名的示例是你寻找的,只需添加其他属性
编辑:
抱歉,读错了...有很多关联不做连接所以你必须使用包来指定条件或动态添加条件,这里是你的代码应该如何照顾添加包含
的条件$contain = array(
'Tag' => array(
'conditions'=> array('Tag.tag'=>'who')
)
);
$com=$this->Post->find('all', array(
'contain'=>$contain
));
记住包含条件覆盖关联中的条件!!如果你想要有额外的条件,你必须立即添加它们:
$this->Post->hasMany['Tag']['conditions'] += array('Tag.tag'=>'who');
请记住,动态关联仅适用于该实例。
此外,您可以为不同类型执行hasmany别名(记住始终定义classname和foreignkey)。
希望这次有效,如果不只是评论看它修复;)