1

我有两个差异表,如下所示:

用户和帖子

需要按帖子表计数从用户表中获取数据

关系定义为:

User Model:

public $hasMany = array('Post');

Post Model

Public $belongsTo = array('User');
4

1 回答 1

2

counterCache - 缓存你的 count()

此功能可帮助您缓存相关数据的计数。模型本身不是通过find('count')手动计算记录,而是跟踪对关联的$hasMany模型的任何添加/删除,并增加/减少父模型表中的专用整数字段。

该字段的名称由单数模型名称后跟下划线和单词“count”组成:

my_model_count

假设您有一个名为ImageComment的模型和一个名为Image的模型,您将向图像表添加一个新的 INT 字段并将其命名为image_comment_count

添加计数器字段后,您就可以开始了。通过添加counterCache键并将值设置为true来激活关联中的 counter-cache :

<?php
class Image extends AppModel {
    public $belongsTo = array(
        'ImageAlbum' => array('counterCache' => true)
    );
}

从现在开始,每次添加或删除与 ImageAlbum关联的Image时,都会自动调整image_count中的数字。

您还可以指定counterScope。它允许您指定一个简单的条件,告诉模型何时更新(或何时不更新,取决于您如何看待)计数器值。

使用我们的图像模型示例,我们可以像这样指定它:

<?php
class Image extends AppModel {
    public $belongsTo = array(
        'ImageAlbum' => array(
            'counterCache' => true,
            'counterScope' => array('Image.active' => 1) // only count if "Image" is active = 1
    ));
}
于 2012-09-06T10:31:51.967 回答