2009-07-23 187 views
0

可能是一個新手問題,因爲我試圖看看所有這些「PHP框架」在我的空閒時間。CakePHP HABTM問題

對於初學者,我想爲多張照片添加多個標籤。我有一個標籤模型和mot模型(照片)。 剪斷MOT模式:

var $hasAndBelongsToMany = array(
            'Tag' => 
            array(
             'className'    => 'Tag', 
             'joinTable'    => 'mots_tags', 
             'foreignKey'    => 'mot_id', 
             'associationForeignKey' => 'tag_id', 
             'unique'     => false 
            ) 
           ); 

在我的標籤控制器的add()我有:

$this->Tag->save($this->data); 

當print_r'ing $這個 - >數據我看到:

Array 

( [Mot] => Array ( [id] => 2 )

[Tag] => Array 
    (
     [title] => 21e21e 
    ) 

標籤插入到了標籤的表,但沒有被插入到mottags(MOT孤單和標籤之間的強調,但是當我在這裏寫的成爲下劃線)表而不是它斜體。我的mots_tags數據庫模式:(sqlite)

create table mots_tags (id INTEGER PRIMARY KEY, mot_id INTEGER, tag_id INTEGER) 

任何線索爲什麼Cake只寫入標籤表而不寫關聯表?我沒有得到任何SQL錯誤。有沒有辦法看看它是否試圖寫關聯表?

回答

2

嘗試

$this->Tag->saveAll($this->data); 

編輯:

那麼,你肯定需要saveAll()。此外,連接的HABTM模型的陣列需要處於某種稍微好奇的格式。如果我沒有記錯,它應該看起來像這樣:

array(
    'Tag' => array('title' => ...),   // primary model 
    'Mot' => array(      // connected HABTM model 
     'Mot' => array($id, $id, $id, ...) 
    ) 
); 
+0

一樣的 - 沒有去mots_tags 。沒有錯誤,標籤到達標籤表。 – jpou 2009-07-23 07:29:11

0

自己找到了解決方案。

因爲Mot的可以有很多標籤,標籤可以有很多Mots,標籤的添加是由標籤控制器而不是mots控制器來處理的,標籤模型還必須包含$ hasAndBelongsToMany。相同MOT模型,只需用標籤(一個或多個)取代BU蒙特(S):

這本來應該在標籤模式還不僅在MOT模型:

var $hasAndBelongsToMany = array(
    'Mot' => 
    array(
     'className'    => 'Mot', 
     'joinTable'    => 'mots_tags', 
     'foreignKey'    => 'tag_id', 
     'associationForeignKey' => 'mot_id', 
     'unique'     => false 
    ) 
);