CakePHPは公式ドキュメントが詳しく書かれているので良いですね。
たとえばhasOneの関係を持つ二つのテーブルのデータを保存するときは、モデル名をキーにした配列でsaveAllまたはsaveAssociatedすればよいのです。
saveAll は saveMany と saveAssociated のラッパーです。 このメソッドはデータ内容をみて、 saveMany か saveAssociated のどちらを使うのかを決定します。 データの添字が数値であれば saveMany を、それ以外は saveAssociated を呼び出します。
このメソッドは、前に説明した2つのメソッド (saveMany と saveAssociated) と互換性があり、 同じオプション引数をとります。場合によって、 saveMany または saveAssociated を 使ったほうがいいこともあります。
なるほど、じゃあsaveAssociatedすると決まっているコードであればそっちを使ったほうがわかりやすいですね。
で、CakePHPにはsaveするときに自動でvalidationしてくれる機能が付いているのですが、とりあえずvalidationだけをしたいときがあります。
そういうときの方法も書いてありますね。
複数のモデルのバリデーションを行うには次のアプローチを使います:
if ($this->ModelName->saveAll( $this->request->data, array('validate' => 'only') )) { // データは有効 } else { // データは無効 }
なるほど、では
$this->ModelName->saveAssociated(
$this->request->data, array('validate' => 'only')
)
でも良さそうですね! ラッパーだし、同じオプション引数を取るらしいですからね!
ダメでした。
'validate' => 'only'のときの分岐はsaveAll内にしか書いてありませんでした。
おい!!!!
'validate' => 'only'を使いたいときはsaveAllで書きましょう。