[CakePHP] saveAllで複数レコードを一括保存する

CakePHP Pancakes
Creative Commons License photo credit: iogi

CakePHPのお話。モデルのsaveAllメソッドで複数レコードを一括保存する方法を、少しハマってしまったのでメモ。

まずは複数レコードが格納された配列の作成から。

例えばUserモデルの複数レコードを一括で保存したい場合、以下のような構造の配列を用意します。構造が重要なのでこのとおり作成しましょう。

参考までに、ビューのFormヘルパーからコントローラにこのような構造の配列を渡してやるには、以下のようにすればよいです。

最後にsaveAllで一括保存。コントローラで以下のようにすれば上で用意した複数レコードを、一括でデータベースに保存する事ができます。

ここで注意点。以下のように書いてしまうとうまく一括保存できないので注意!ここでハマりました。

説明は以上です。うまく使うと、すごくコードがシンプルにかけるので、使えるシーンでは積極的に活用していきたいですね!
それでは!