$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サイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。