[英]HABTM bridge data not saving
這是我第一次在CakePHP中嘗試HABTM,但進展並不理想。
我有表foos
和表bars
。 當一個foo
被保存時,我想與它關聯幾個bars
。 我正在嘗試使用bars_foos
橋進行此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)
}
}
}
可以說創建了ID為9的someFoo
...我希望將以下記錄添加到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
表中插入任何bars_foos
)
終於成功了。 看來我們不應該顯式地輸入相關表的ID鍵。 這種格式對我有用:
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 |
+--------+----------+
這似乎也有相同的效果(不是兩次嵌套Bar ID)
array(2) {
["Foo"]=>
array(1) {
["name"]=> string(7) "fooName"
}
["Bar"]=> array(4) {
[0]=> int(3)
[1]=> int(2)
[2]=> int(9)
[3]=> int(7)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.