2014-10-07 35 views
0

這是我第一次嘗試在CakePHP中使用HABTM,但它並沒有像我希望的那樣好。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創建...我倒是希望下面的記錄將被添加到bars_foos表:

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

目前沒有在bars_foos表發生,只有foos表是越來越具有t更新他新創建了「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

終於得到它的工作。看來我們不應該明確地放入關聯表的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 | 
+--------+----------+ 

這似乎也有同樣的效果(沒有嵌套欄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) 
    } 
}