LoginSignup
5
6

More than 5 years have passed since last update.

cakePHPでHABTMのレコードを一括保存する方法

Posted at

やたら悩んだのでメモ。

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を二重にしないといけないのがわからなくてはまりました。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6