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

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

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


结果“模型“注释”与模型“计数”不相关”错误消息。

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


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

我的另一个猜测是

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


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

最佳答案

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

'counterCache' => true

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

更好,因为当您为用户获取数据时,它的处理速度更快,甚至不会触及注释表。由于您使用的是Containable行为,因此我想您想要的是速度和轻便。

08-28 04:55