2009-09-17 69 views
0

的counterCache我有一個視頻共享網站項目的機型如下:問題CakePHP的

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' 
      ) 
     ); 
    } 

的counterCache的標籤不工作。我不知道爲什麼,當我試圖添加一個beforeSave()回調到videosTag模型時,我發現它不會在視頻被保存時執行(並且此視頻有標籤,並且我在數據庫中找到它們,所以關係videosTags已保存?)!!!任何人都可以解釋爲什麼會發生這種情況

+0

你是如何保存數據?只有在使用'VideosTag'模型保存記錄時,''VideosTag'模型'beforeSave'纔會被觸發,但可能不會通過'$ this-> Tag-> saveAll'來觸發。 – deceze 2009-09-18 03:37:57

+0

我不知道它是如何保存的,因爲cakePHP生成的每一件事,因爲視頻模型與標籤的HABTM關係的videosTags得到保存。 – Ayoub 2009-09-18 10:18:46

回答

2

保存視頻數據是這樣的:

array(
    'Video' => array(
    ... 
), 
    'Tag' => array(
    'Tag' => array(
     ... 
    ), 
), 
); 

在視頻模式將不會觸發對VideosTag模型beforeSave回調,因爲蛋糕處理HABTM數據,而無需(甚至使用)的加入/帶/通過模型。據我所知,沒有內置的功能可以實現你想要實現的功能。

檢出Counter Cache behavior for HABTM relations,可能做你需要的東西