2009-07-23 4 views
0

Возможно, это вопрос новичков, поскольку я пытаюсь понять, что все эти «фреймворки PHP» находятся в моем свободном времени.CakePHP HABTM question

Для начала я хочу добавить несколько тегов к нескольким фотографиям. У меня есть модель тегов и мот-модель (фотографии). Снип из MOT модели:

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

В моих тегах контроллер в оных() У меня есть:

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

Когда print_r'ing $ this-> данные, которые я вижу:

Array 

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

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

)

Тэга вставляются в таблицу тегов, но ничто не вставляется в mottags (Тереза ​​подчеркивание между словцом и тегом, но это курсивом, когда я пишу это здесь, вместо того, чтобы стать таблицей подчеркивание). Моя mots_tags дб схема: (SQLite)

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

Есть подсказки, почему торт пишет только таблицу тегов, а не к столу associacions? Я не получаю никаких SQL-ошибок. Есть ли способ увидеть, пытается ли он вообще написать таблицу ассоциаций?

ответ

2

Попробуйте

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

Edit:

Ну, вам обязательно нужно saveAll(). Кроме того, массив подключенной модели HABTM должен быть в определенном, немного любопытном формате. Если я правильно помню, это должно выглядеть так:

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

То же самое - Ничто не идет в mots_tags , Нет ошибок, тег достигает таблицы тегов. – jpou

0

Нашел решение самостоятельно.

Потому что Mot может иметь много тегов, а теги могут иметь много Mots, а добавление тегов обрабатывается контроллером тегов вместо контроллера mots, модель тега также должна содержать $ hasAndBelongsToMany. То же самое, как и в MOT модели, только с биркой (ов) заменены бушель Mot (s):

Это должно быть в модели тега также не только в MOT модели:

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