有没有办法为现有数据初始化CounterCache?我重构我的代码以使用它,事实上,如果我插入一条记录,它将更新数据,但在此之前它显示0将破坏其他功能。我想过编写一个脚本来完成工作,但是想到可能有一个技巧?
答案 0 :(得分:3)
如果您正在寻找的话,没有可以神奇地更新所有模型的内置功能。</ p>
然而,您可以使用Model::updateCounterCache()
手动更新计数器缓存,检查Model
在保存或删除时如何使用它。
这是一个基本的例子,假设Article hasMany Comment / Comment belongsTo Article
关联。
$article = ClassRegistry::init('Article');
foreach(array_keys($article->find('list')) as $id) {
$article->Comment->updateCounterCache(array(
$article->Comment->belongsTo['Article']['foreignKey'] => $id
));
}
这将更新数据库中所有文章的所有已配置计数器(请记住,根据数据库的大小,这可能是一项非常繁重的任务)。