我创建了一个包含帖子和评论的简单博客。我想查找至少有一条评论的所有帖子,并找到所有没有评论的帖子。有蛋糕方法吗? I.E.也许像是
$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
但似乎有更好的方法来做到这一点。
注意:帖子有很多评论和评论属于帖子
答案 0 :(得分:2)
$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模型中设置了模型关系时才有效。
答案 1 :(得分:0)
一种解决方案是:
$this->Post->find('all');
如上所述,您的关系设置正确,评论已经与此信息一起返回,您只需要对它们进行计数并从那里处理处理......如下所示:
$posts = $this->Post->find('all');
count($posts[0][Comment]);
可能会有更优雅的方式 - 因为我自己是CakePHP的新手,但希望这有一些价值。
答案 2 :(得分:0)
我仍然是CakePHP的新手,但我认为您可以使用counterCache跟踪Posts表中某个字段中每个Post模型记录的#Comments,然后在Find中使用一些简单的条件来获取你的内容正在找。当添加/删除子模型记录时,counterCache会自动更新父模型记录字段中的缓存计数字段。
CakePHP 1.2的counterCache:http://book.cakephp.org/view/816/counterCache-Cache-your-count