関連付けたらsaveall

まっちー

まっちー

送信したデータを保存するとき、saveじゃなくてsaveallを使えば、アソシエーションによって関連付けられたモデルのデータも一緒に保存することができる。

ただ、hasmanyで関連付けたデータは整数のインデックスがついた配列で渡されるので、ちょっと注意が必要。

たとえば、userとclientというモデルがhasmanyで関連付いているとして何か適当なデータを送ると、$this->dataにはこんな感じでデータが入る。

array([User] =>

     array([user_name] => macchi

         [spec] => junk

     )

    [Client] =>

     array([0] =>

         array(<pre>[code] => go

             [user_id] => 1

             )

        [1] =>

         array(<pre>[code] => zuya

             [user_id] => 1

         )

     )

)

上記のカラム名とかは適当ですが、まあこんな感じです。

どんなデータが送られてきているのか見たければ、print_r($this->data)で見れる。print_rはprと略しても良いらしい。個人的にはこのprはしょっちゅう使う関数だと思う。困ったらとにかくprだ。

saveallをすると各レコードに対してバリデーションも勝手にやってくれるそうだけど、全てのレコードに対してバリデーションを行うには、validateにfirstを入れる必要があるみたい。

$this->User->seveall($this->data, array('validate' => 'first');

僕も最初は関連付けてある方のバリデーションが一向にされなくて困っていたのだけど、これを書いたら解決した。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

プログラマのまっちーです。酒が大好きです。ある一定量のお酒を飲むと壊れたレディオモードに入り、同じことを繰り返す癖があります。宜しくお願いいたします。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL