cakephp找到有评论的所有帖子

时间:2010-10-07 18:05:39

标签: php sql cakephp

我创建了一个包含帖子和评论的简单博客。我想查找至少有一条评论的所有帖子,并找到所有没有评论的帖子。有蛋糕方法吗? 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

但似乎有更好的方法来做到这一点。

注意:帖子有很多评论和评论属于帖子

3 个答案:

答案 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