LoginSignup
0
0

More than 5 years have passed since last update.

saveAllはsaveAssociatedのラッパーだからあえてこちらを使う必要も無いと思っていたが

Posted at

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で書きましょう。

0
0
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
0
0