Данные моста HABTM не сохраняются

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

У меня есть стол 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 создается с идентификатором 9 … Я хотел бы, чтобы следующие записи были добавлены в bars_foos Таблица:

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

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

Я пытался следовать документация CakePHP с моей моделью:

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)
}
}
0

Другие решения

Других решений пока нет …