我有两个不同的表,如下所示:
用户和发布
需要来自用户表格顺序的数据(按发布次数)表格
关系定义为:
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
));
}