必要ないときはunbindModel

まっちー

まっちー

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

アソシエーションで関連づけられていると、上記のようにsaveallを行うと関連づけられているものも一緒にデータの登録が行われる。登録したくないと思っていてもcakeはなかなか気配り上手なやつなので、気を利かせて勝手にバリデーションやらデータの登録やらを行ってしまう。

そういうとき、unbindModelを使うと、一時的にアソシエーションを解除することができる。

たとえば、UserとImageというテーブルがhasManyで関連づけられていたとする。こういうとき、基本的にimageテーブルにはuser_idみたいなフィールドがあると思われるが、何のデータも登録したくないと思っていても、user_idにはデータが登録されてしまう。

$this->User->unbindModel(array('hasMany') => array('Image'));

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

こんな感じでアソシエーションを解除すると、saveallを実行してもimageテーブルにはデータが登録されない。

逆に一時的にアソシエーションを設定したい場合にはbindModelを使えばいける。

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

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

この記事のシェア数

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

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