2014-10-07 4 views
0

Это моя первая попытка HABTM в CakePHP, и это не так, как я надеялся.Данные моста HABTM не сохраняются

У меня есть таблица foos и таблица bars. Когда сохраняется foo, я хочу связать с ним несколько bars. Я пытаюсь сделать это с мостом bars_foos.

Я хотел, чтобы иметь возможность сохранить таким образом, что я могу передать foo вместе с кучей bars что-то вроде:

array(2) { 
    ["Foo"]=> array(1) { 
    ["name"]=> string(7) "someFoo" 
    } 
    ["Bar"]=> array(4) { 
    [0]=> array(1) { 
     ["ID"]=> int(3) 
    } 
    [1]=> array(1) { 
     ["ID"]=> int(9) 
    } 
    [2]=> array(1) { 
     ["ID"]=> int(4) 
    } 
    [3]=> array(1) { 
     ["ID"]=> int(15) 
    } 
    } 
} 

позволяет сказать someFoo получает создан с ID 9 ... Я «d хочет следующие записи будут добавлены к bars_foos таблице:

+--------+----------+ 
| bar_ID | foo_ID | 
+--------+----------+ 
|  3 |  9 | 
|  9 |  9 | 
|  4 |  9 | 
|  15 |  9 | 
+--------+----------+ 

в настоящее время ничего не происходит в bars_foos таблицы, только таблица foos становится обновлена ​​с т он недавно создал «someFoo». Единственный раз, когда этот мост должен постоянно обновляться, когда создание нового Foo

Я пытался следовать the CakePHP documentation с моей моделью:

class Foo extends AppModel { 
    public $primaryKey = "ID"; 

    public $hasAndBelongsToMany = array(
     'Bar' => 
      array(
       'className' => 'Bar', 
       'joinTable' => 'bars_foos', 
       'foreignKey' => 'foo_ID', 
       'associationForeignKey' => 'bar_ID' 
     ) 
    ); 
} 

и используя это в моем контроллере ...

$this->Foo->saveAll($data); //$data looks like the Array above in the first code block 

Я также пробовал с моим $data в этих форматах на основе вещей, которые я видел при поиске решения:

array(1) { 
    ["Foo"]=> array(3) { 
    ["name"]=> string(7) "FooName" 
    ["Bar"]=> array(2) { 
     [0]=> array(1) { 
     ["ID"]=> int(3) 
     } 
     [1]=> array(1) { 
     ["ID"]=> int(2) 
     } 
    } 
    } 
} 

и

array(2) { 
    ["Foo"]=> array(1) { 
    ["name"]=> string(7) "fooName" 
    } 
    ["Bar"]=> array(1) { 
    ["Bar"]=> array(2) { 
     [0]=> array(1) { 
     ["ID"]=> int(3) 
     } 
     [1]=> array(1) { 
     ["ID"]=> int(2) 
     } 
    } 
    } 
} 

и получил тот же результат (новый foo получает создан, но ничто не вставляется в bars_foos таблице)

ответ

0

Наконец получил это работает. Кажется, мы не должны явно вводить ключи идентификатора для связанной таблицы. Этот формат работает для меня:

array(2) { 
    ["Foo"]=> 
    array(1) { 
    ["name"]=> string(7) "fooName" 
    } 
    ["Bar"]=> array(1) { 
    ["Bar"]=> array(4) { 
     [0]=> int(3) 
     [1]=> int(2) 
     [2]=> int(9) 
     [3]=> int(7) 
    } 
    } 
} 

, и это дает мне мой желаемый результат в таблице моста:

+--------+----------+ 
| bar_ID | foo_ID | 
+--------+----------+ 
|  3 |  9 | 
|  2 |  9 | 
|  9 |  9 | 
|  7 |  9 | 
+--------+----------+ 

Это также, кажется, имеет тот же эффект (не гнездится адвокатура идентификатор дважды)

array(2) { 
    ["Foo"]=> 
    array(1) { 
    ["name"]=> string(7) "fooName" 
    } 
    ["Bar"]=> array(4) { 
     [0]=> int(3) 
     [1]=> int(2) 
     [2]=> int(9) 
     [3]=> int(7) 
    } 
} 
Смежные вопросы