CounterCache CakePHP用于现有模型

时间:2014-11-27 17:29:28

标签: cakephp

有没有办法为现有数据初始化CounterCache?我重构我的代码以使用它,事实上,如果我插入一条记录,它将更新数据,但在此之前它显示0将破坏其他功能。我想过编写一个脚本来完成工作,但是想到可能有一个技巧?

1 个答案:

答案 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
    ));
}

这将更新数据库中所有文章的所有已配置计数器(请记住,根据数据库的大小,这可能是一项非常繁重的任务)。