cakePHP的计数器缓存问题

cakePHP的计数器缓存问题,php,cakephp,Php,Cakephp,我在一个视频共享网站项目中使用了以下模型: class Video extends AppModel { var $name = 'Video'; var $hasAndBelongsToMany = array( 'Tag' => array( 'className' => 'Tag', 'joinTable' => 'videos_tags',

我在一个视频共享网站项目中使用了以下模型:

 class Video extends AppModel {
        var $name = 'Video';
        var $hasAndBelongsToMany = array(
            'Tag' => array(
                'className' => 'Tag',
                'joinTable' => 'videos_tags',
                'foreignKey' => 'video_id',
                'associationForeignKey' => 'tag_id',
                'unique' => true,
            )
        );
    }

    class Tag extends AppModel {
        var $name = 'Tag';

        var $hasAndBelongsToMany = array(
            'Video' => array(
                'className' => 'Video',
                'joinTable' => 'videos_tags',
                'foreignKey' => 'tag_id',
                'associationForeignKey' => 'video_id',
                'unique' => true,
            )
        );

    }



 class VideosTag extends AppModel {
        var $name = 'VideosTag';

        var $belongsTo = array(
            'Video' => array(
                'className' => 'Video',
                'foreignKey' => 'video_id',
            ),
            'Tag' => array(
                'className' => 'Tag',
                'foreignKey' => 'tag_id',
                'conditions' => '',
                'counterCache' => 'videos_tag_counter'
            )
        );
    }

标记的计数器缓存不工作。我不知道为什么,当我尝试向videosTag模型添加beforeSave()回调时,我发现它在保存视频时不会执行(并且该视频有标记,我在数据库中找到了它们,那么videosTag的关系是如何保存的?)!!!任何人都能解释为什么会发生这种情况。

用以下数据保存视频:

array(
  'Video' => array(
    ...
  ),
  'Tag' => array(
    'Tag' => array(
      ...
    ),
  ),
);
在视频模型上,将不会在VideosTag模型上触发beforeSave回调,因为Cake处理HABTM数据时不需要(甚至不使用)join/with/THORG模型

据我所知,您试图实现的目标没有内置功能


签出,可以执行您需要的操作

如何保存数据?只有使用
VideosTag
模型保存记录时,才会触发
VideosTag
模型
beforeSave
,但可能不是通过
$this->Tag->saveAll
保存的。我不知道它是如何保存的,因为cakePHP生成了所有的东西,而且视频模型与标记有HABTM关系,所以VideoStag被保存。