基于相关表数据计数的订单数据


Order data based on count of related table data

我有两个不同的表,如下所示:

用户和发布

需要来自用户表格顺序的数据(按发布次数)表格

关系定义为:

User Model:
public $hasMany = array('Post');
Post Model
Public $belongsTo = array('User');

counterCache-缓存您的计数()

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

字段名称由单数型号名称、后跟下划线和单词"count"组成:

my_model_count

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

一旦你添加了计数器字段,你就可以开始了。通过添加counterCache键激活关联中的计数器缓存,并将值设置为true:

<?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
    ));
}