我创建了一个简单的博客,其中包含帖子和评论。我想查找所有具有至少一条评论的帖子,并且还查找所有没有评论的帖子。有没有Cakephp的方法可以做到这一点?IE浏览器也许像
$this->Post->find('all', ???);
我最终写了自己的查询,下面的示例查找所有带有至少1条评论的帖子
SELECT * FROM ( select posts.*, count(comments.id) as comment_count from posts left join comments on posts.id = comments.post_id group by posts.id ) as T WHERE comment_count != 0
但似乎会有更好的方法来做到这一点。
注意:帖子有很多评论,评论属于帖子
$grouped_comments = $this->Comment->find('all', array('group' => 'Comment.post_id'));
这将为您提供按post_id分组的所有评论的数组,因此您将对每个帖子仅拥有一个评论,这就是您想要的。从那里,您可以随心所欲地处理这些数据。
假设您要发布带有评论的所有帖子标题的列表。
echo "<H1>Posts with comments:</H1>"; foreach ($grouped_comments as $comment) { echo $comment['Post']['Title'] . "<br>"; }
当然,只有在comment.php模型中设置了模型关系时,此方法才有效。