Вы уверены, что используете counterCache
правильно?counterCache
и ваше собственное решение несколько не связаны.
Эта функция помогает вам кэшироватьколичество связанных данных.Вместо подсчета записей вручную с помощью find ('count'), сама модель отслеживает любое добавление / удаление по отношению к связанной модели $ hasMany и увеличивает / уменьшает выделенное целое поле в таблице родительской модели.
...
class Image extends AppModel {
var $belongsTo = array(
'ImageAlbum' => array('counterCache' => true)
);
}
С этого момента каждый раз, когда вы добавляете или удаляете изображение, связанное с ImageAlbum, число в ImageAlbum.image_count
настраивается автоматически.
Другими словами, эторазработано так, чтобы не приходилось $this->Model->find('count')
вручную, и это изменится только при добавлении или удалении записей.В вашем случае вы должны добавить поле comment_count
к вашей модели Post (как вы это сделали), но затем указать belongsTo => Post, counterCache => true
в модели Comment.Причина в том, что всякий раз, когда модель Comment изменяется (добавляет / удаляет), она должна обновлять counterCache
в модели Post.
Надеюсь, что это поможет.