ひとりまとめ

もろもろのメモ

CakePHP リレーションしてるテーブルをまとめて保存

複数のテーブルがリレーション設定されているとき、たとえばBooksテーブルのauthor_idとAuthorテーブルのidとが繋がっているとき、次のようにするだけで関連するフィールドがごっそり取って来れます。
 $this->Book->read();

これはリレーションされてないときでもまったく同じ命令なので、値を保存する時も、勝手に関連するテーブルまできっと保存されるんだろうと思っていた時期が私にもありました。


ちなみに、チュートリアルで登場するテーブルの値の保存方法は、こちら。
 $this->Book->save($this->data['Book']);


けれど、これだとBookテーブルだけしか保存してくれません。ううむ・・・。
探してみると、きちんと書いてありました〜!
3.7.4 データを保存する

ということで、リレーションしているテーブルたちを残らず保存するには、次のようにするみたい。
 $this->Book->saveAll($this->data)

無事に保存できました。ほっ・・・。


参考:テーブルにリレーションの設定をする方法
3.7.6 関連: モデルを結びつける