我想在博客中显示特定帖子的评论总数。我的数据库中有'posts'和'comments'表。现在,我对使用counterCache感到有点困惑。 我首先在'posts database'中创建了一个字段,即'comment_count'然后我在post模型中添加了counterCache键。
var $hasMany = array('Comment'=>array('counterCache'=>true));
但这不起作用。我也尝试过反过来,即在cooments表中创建一个字段并将counterCache键添加到模型中。但这也没有用。 我在这里缺少什么?我可以使用find('count')显示注释的数量吗?或者还有其他方法可以达到这个目的吗?
答案 0 :(得分:4)
您确定正确使用counterCache
吗? counterCache
和您自己的解决方案有些无关。
3.7.4.1.1 counterCache - Cache your count()
此功能可帮助您缓存相关数据的计数。模型本身不会通过find('count')手动计算记录,而是跟踪对关联的$ hasMany模型的任何添加/删除,并增加/减少父模型表中的专用整数字段。
...
class Image extends AppModel { var $belongsTo = array( 'ImageAlbum' => array('counterCache' => true) ); }
从现在开始,每次添加或删除与ImageAlbum相关联的图片时,
ImageAlbum.image_count
内的数字都会自动调整。
换句话说,它的设计使您不必须手动$this->Model->find('count')
,并且只有在添加或删除条目时才会更改。在您的情况下,您应该在Post模型中添加comment_count
字段(就像您一样),但在Comment模型中指定belongsTo => Post, counterCache => true
。原因是每当 Comment 模型更改(添加/删除)时,它必须更新Post模型中的counterCache
。
希望有所帮助。
答案 1 :(得分:0)
您正在以正确的方式使用counterCache。但是尝试清除/ app / tmp / cache /
中的所有文件(不是目录!)答案 2 :(得分:0)
我认为counterCache不能用于$hasMany
关系,只能在$belongsTo
上使用。
答案 3 :(得分:0)
有没有办法为现有数据初始化CounterCache?我重构我的代码以使用它,实际上如果我插入记录它会更新数据,但在此之前它显示0将破坏其他功能。 我想过编写一个脚本来完成工作,但是想到可能有一个技巧?
答案 4 :(得分:-6)
伙计们,我明白了。在posts控制器的view操作中编写以下代码,设置它然后在视图文件中回显它。完美运作
$counts = $this->Post->Comment
>find('count',array('conditions'=>array('Comment.post_id'=>$post['Post']['id'])));