CakePHP HABTM问题

时间:2009-07-23 07:17:29

标签: cakephp has-and-belongs-to-many

可能是一个新手问题,因为我正试图在我的空闲时间看到所有这些“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错误。有没有办法看看它是否试图写入关联表?

2 个答案:

答案 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
    )
);