可能是一个新手问题,因为我正试图在我的空闲时间看到所有这些“PHP框架”。
对于初学者,我想为多张照片添加多个标签。我有一个标签模型和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 $ this->数据时,我看到:
Array
( [Mot] =>排列 ( [id] => 2 )
[Tag] => Array
(
[title] => 21e21e
)
)
标签被插入到Tags表中,但是没有任何东西被插入到mottags中(在mot和tag之间是下划线,但是当我在这里写它而不是成为下划线时它是斜体)表。我的mots_tags db schema:(sqlite)
create table mots_tags (id INTEGER PRIMARY KEY, mot_id INTEGER, tag_id INTEGER)
为什么Cake只写入Tags表而不是associacions表的任何线索?我没有得到任何SQL错误。有没有办法看看它是否试图写入关联表?
答案 0 :(得分:2)
尝试
$this->Tag->saveAll($this->data);
编辑:
嗯,你肯定需要saveAll()
。此外,连接的HABTM模型的阵列需要采用某种稍微好奇的格式。如果我没记错的话,它应该是这样的:
array(
'Tag' => array('title' => ...), // primary model
'Mot' => array( // connected HABTM model
'Mot' => array($id, $id, $id, ...)
)
);
答案 1 :(得分:0)
我自己找到了解决方案。
因为Mot可以有很多标签,而标签可以有很多Mots,而标签添加是由标签控制器而不是mots控制器处理的,标签模型还必须包含$ hasAndBelongsToMany。与mot模型相同,只需将Tag替换为Mot(s):
这应该也在标签模型中,不仅仅在mot模型中:
var $hasAndBelongsToMany = array(
'Mot' =>
array(
'className' => 'Mot',
'joinTable' => 'mots_tags',
'foreignKey' => 'tag_id',
'associationForeignKey' => 'mot_id',
'unique' => false
)
);