CakePHP 2.x以前では、unbindModelでは個別に関連を指定する必要があって煩雑になることが多いので、例外指定した関連以外の全モデルの関連を外すメソッドを作りました。
class AppModel extends Model { public function unbindAllBut($params = array(), $reset = true) { foreach(array('hasOne', 'hasMany', 'belongsTo', 'hasAndBelongsToMany') as $association){ if(!empty($this->{$association})) { $unbind = array_keys($this->{$association}); if(array_key_exists($association, $params)) { $unbind = array_diff($unbind, $params[$association]); } $this->unbindModel(array($association => $unbind), $reset); } } } }