今まで、CakePHP の データ保存では save() しか使っていなかった。
理由は save() だけ使えば何とかなるので、
View とか Controller の機能を勉強することが多かったから。
ただ、前から saveMany() とか色々と便利なのがあるのは知っていたので、
調べてみた。
まずは簡単にまとめ。
1.saveMany()
単一モデルのデータをまとめて保存できる。
save() を ループで回す必要がなくなる。
deepオプションを true にすることでアソシエーションも保存できる。
2.saveAssociated()
アソシエーションを含むのデータ構造をまとめて保存できる。
deepオプションを true にすることで1階層以上のアソシエーションも保存できる。
3.saveAll()
saveMany() と saveAssociated() のラッパー。
保存対象データ配列の添字が数字であれば、saveMany() を実行し、
文字列であれば、saveAssociated()を実行する。
オプションは saveMany(), saveAssociated() と一緒なので、
deepオプションが使える。
公式サイトにもっと詳しい説明が載ってます。
http://book.cakephp.org/2.0/ja/models/saving-your-data.html
ここで、疑問に思ったのが、deepオプションの存在。
saveMany() は単一モデルをまとめて保存するメソッドだが、
deepオプションを true にすると、
アソシエーション保存も可能・・・。
saveAssociated() 使う必要あるのか・・・?
それとも、saveMany() の deepオプションは1階層アソシエーションしか保存されないのか・・・。
ということで、調べてみた結果を箇条書きでまとめる。
・saveMany() でdeepオプションを true にすると、アソシエーションデータが保存できる。
2階層でも問題ないので、階層制限はなさそう。
ただ、単体データは保存できない。
あくまで複数データ(配列)のみが対象。
・saveAssociated() では多階層アソシエーションデータの保存はできるが、
複数データを一括保存できない。
つまり、ループで回す必要がある。
・ saveAll() ではdeepオプションを true にすると、
何でも保存できる。
saveMany() と saveAssociated() のいいとこ取り。
つまり、saveAll() を使っとけばいいかなと・・・。
最初は saveMany() でdeepオプションをtrueにすれば、
アソシエーションデータも保存可能なので、
saveMany() だけでいいかと思ったけど、
単体データが保存できなかった。
あくまで複数データを保存するメソッドらしい。
saveAssociated() は単体データが保存保存できるが、
複数データを一括で登録することはできない。
saveAll() は全部OKなので、saveAll() 使っとけばいいと思う。