我想通过解决以下示例来更好地理解CakePHP(v 2.4.5)中的joins
:
Post hasMany Comment
Post.id == Comment.post_id
Comment.published
可以是1
或0
Post
模型中编写查询。为了不打破分页,我可以根据Post
您可能建议从Comment
模型处理此问题,如下所示:
https://stackoverflow.com/a/3890461/155638
但这是关于更好地理解联接,所以我想设置从Post
模型编写查询的要求。
我大致有以下想法,希望RIGHT联接会排除所有不符合要求的帖子:
$this->Post->find('all', array(
'joins' => array(
array(
'table' => 'comments',
'alias' => 'CommentsJoined',
'type' => 'RIGHT',
'conditions' => array(
'Post.id = CommentsJoined.post_id',
'CommentsJoined.published = true'
)
)
),
'contain' => array(
'Comment' => array(
'conditions' => array(
'Comment.published' => 1
)
)
)
);
但它对我来说还不适用 目前,我的查询返回19次相同的帖子,而不是19个唯一的帖子。
如何离开这里?这种方法是正确的吗?
亲切的问候!
巴特
答案 0 :(得分:1)
我似乎走在了正确的轨道上。最后一步是删除重复的帖子
这是通过将'group' => 'Post.id'
添加为查询的属性来完成的。
像这样:
$this->Post->find('all', array(
'joins' => array(
array(
'table' => 'comments',
'alias' => 'CommentsJoined',
'type' => 'RIGHT',
'conditions' => array(
'Post.id = CommentsJoined.post_id',
'CommentsJoined.published = true'
)
)
),
'group' => 'Post.id',
'contain' => array(
'Comment' => array(
'conditions' => array(
'Comment.published' => 1
)
)
)
);