NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2009.06.02

必要ないときは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を使えばいける。