やたら悩んだのでメモ。
hasAndBelongsToManyな関係を定義して扱いたかったので、お手本どおり
Cake HABTM ingredients
として、ケーキと材料が多対多の関係になるように定義した。
cakes, ingredients, cakes_ingredients の三つのテーブルを定義。
cakes_ingredientsの中身は
id, cake_id, ingredient_id
(idはなくてもいいらしい)
このとき、テーブル名は Model1Name_Model2Nameにするんだけど、必ずアルファベット順に並べないといけないらしい。
で、このテーブルに
- 新しくケーキを追加したい
- 既存の材料を追加したケーキと関連づけたい
時は、以下のようにsaveAllを使って行う。
$data = array(
'Cake' => array(
'name' => 'ショートケーキ',
),
'Ingredient' => array(
'Ingredient' => array(
1, 3, 4 // 既にある材料のID
)
)
)
$this->Cake->saveAll($data);
これでcakesとcakes_ingredientsの両方のテーブルにレコードが挿入されます。
…Railsと複数形の扱いが似てるようで違うので混乱する…
そして$dataの中でIngredientのarrayを二重にしないといけないのがわからなくてはまりました。