根据相关表数据的计数订购数据

时间:2012-09-06 10:11:17

标签: php cakephp cakephp-2.0

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

用户和帖子

需要按用户表格顺序列出的数据表

关系定义为:

User Model:

public $hasMany = array('Post');

Post Model

Public $belongsTo = array('User');

1 个答案:

答案 0 :(得分:2)

counterCache - 缓存您的计数()

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

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

my_model_count

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

添加了计数器字段后,您就可以了。通过添加 counterCache 键激活关联中的反缓存,并将值设置为 true

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

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

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

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

<?php
class Image extends AppModel {
    public $belongsTo = array(
        'ImageAlbum' => array(
            'counterCache' => true,
            'counterScope' => array('Image.active' => 1) // only count if "Image" is active = 1
    ));
}
相关问题