2012-08-29 32 views
0

我已經在CakePHP中2.2.1有兩個型號:CakePHP的不插入鏈接協會HABTM關係

class Episode extends AppModel { 
    public $hasAndBelongsToMany = array(
    'Tags' => array('className' => 'Tag') 
    ); 
} 

class Tag extends AppModel { 
    public $hasAndBelongsToMany = array(
     'Episode' => array('className' => 'Episode') 
    ); 
} 

我要插入的一個插曲和標籤同時並將它們彼此鏈接。從文檔我,這將是我的控制方法中執行正確的代碼:

$this->Tag->create(); 
$this->Tag->save(array(
    'name' => 'Test Tag' 
)); 
$tagid = $this->Tag->getInsertID(); 

var_dump($tagid); // works 

$this->Episode->create(); 
$this->Episode->save(array(
    'Episode' => array(
     'title' => 'Test with Tag' 
    ), 
    'Tags' => array(
     'Tag' => array($tagid) 
    ) 
)); 

我沒有得到任何錯誤消息,並且兩個記錄被創建,但沒有插入episodes_tags錶行。 CakePHP做這些查詢:

Nr Query                            Err Aff Rws Took (ms) 
1 INSERT INTO `pottcast`.`tags` (`name`) VALUES ('Test Tag')                1 1 0 
2 INSERT INTO `pottcast`.`episodes` (`title`) VALUES ('Test with Tag')             1 1 0 
3 SELECT `EpisodesTag`.`tag_id` FROM `pottcast`.`episodes_tags` AS `EpisodesTag` WHERE `EpisodesTag`.`episode_id` = 9  0 0 0 

我做錯了什麼?

回答

0

試試這個:

在情節模式:

public $hasAndBelongsToMany = array(
    'Tag' => array(
     'className' => 'Tag', 
     'joinTable' => 'episodes_tags', 
     'foreignKey' => 'episode_id', 
     'associationForeignKey' => 'tag_id', 
     'unique' => 'keepExisting', 

    )); 

在你的控制器:

$this->Episode->save(array(
    'Episode' => array(
     'title' => 'Test with Tag' 
    ), 
    'Tag' => array(
     'Tag' => $tagid 
    ) 
)); 

詢問如果不是爲你工作。

+0

我也是,但沒有改變。你還有其他建議嗎? – YMMD

+0

它爲我工作。我已經實施了同樣的。 – Krishna

+0

哦,你說得對。事實上它確實創建了行,但我感到困惑,因爲它在SQL日誌中將其打印爲「SELECT」。非常感謝您的幫助!你知道沒有第三個INSERT的原因嗎? – YMMD