php - CakePHP 模型 : COUNT(*) in Containable

标签 php cakephp model pagination

我有一个 CakePHP 1.3 应用程序,并且非常喜欢 Containable behavior用于获取数据。

假设我有一些帖子与评论存在一对多关系。我使用 Containable 来查询(用于分页)所有帖子和所属评论的列表。但我只对每个帖子有多少评论感兴趣。我没有找到任何方法可以在不获取所有评论行的情况下使用 containsable 来实现此查询。我尝试过:

$this->paginate=array(
            'fields' => 'Post.title, Post.created',
            'contain' => array('Comment'=>'COUNT(*) AS count'),
        );

导致“模型“Comment”与模型“Count”不相关”错误消息。

$this->paginate=array(
            'fields' => array('Post.title, Post.created'),
            'contain' => array('Comment'=>array('fields'=>'COUNT(*) AS count'),
        );

不起作用,结果集为每个帖子包含一个空的 Comment 数组,最后一个除外,其中包含计数字段,但包含所有评论的数量,而不仅仅是所属评论的数量。

我的另一个猜测是

$this->paginate=array(
            'fields' => 'Post.title, Post.created, COUNT(Comment.id)',
            'contain' => array('Comment'=>array('fields'=>''),
        );

但这会导致错误,因为 hasMany 关系是独立查询的,因此 Answer 表不在 Post 条目的查询中。 如何计算帖子的评论数?

最佳答案

嗯,最好的方法是在 posts 表中设置一个名为 comment_count 的字段,并将此键添加到 Comment 模型 $belongsTo Post 数组中:

'counterCache' => true

每当评论发生任何情况时,相关帖子中的 comment_count 字段都会更新(实际上,它每次都会重新计数,而不仅仅是添加或删除)。

这更好,因为当您为用户获取数据时,速度更快,甚至不会触及评论表。由于您使用的是 Containable 行为,我猜您正在寻找速度和轻量。

关于php - CakePHP 模型 : COUNT(*) in Containable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308087/

相关文章:

php - 规范化数据模型 - 在 CakePHP 中查找简单连接

c# - 如何在 ASP.Net MVC 中将列表对象显示到 View ?

java - Model 类和 DAO 类的区别

ruby-on-rails - 如何实例化具有属性的模型对象?

php - 将 curl 响应保存到 php 变量中

php - MySQL: 'XYZ' 中的未知列 'field list'

cakephp - 如何在 cakephp 中定义可在整个应用程序中访问的变量?

php - 如何将页面编码为utf8

PHP将所有参数作为数组获取?

php - 如何在 CakePHP 2.0.2 中指定数据库配置?