アソシエーションを外す

2009年10月11日日曜日
  • このエントリーをはてなブックマークに追加
アソシエーションの動的な外し方でunbindModelを使うらしいのですが、アソシエーションが多岐にわたる場合はすべて記述してくのは面倒。

いろいろ調べてみましたが、最終的にはこんな感じに。

[PHP]
/*============================================================
*
* Itemのアソシエーションを外す
*
*============================================================*/
function _unbind($list){
if($list == 'all'){
foreach($this->hasOne as $key =>$vale){$hasOne[] = $key;}
foreach($this->hasMany as $key =>$vale){$hasMany[] = $key;}
foreach($this->belongsTo as $key =>$vale){$belongsTo[] = $key;}
$this->unbindModel(array('hasOne'=> $hasOne,'hasMany'=>$hasMany,'belongsTo'=>$belongsTo),true);
}else{
$hasMany = '';
$hasOne = '';
$belongsTo = '';
foreach($list as $model){
if($model === 'hasManyのモデル名1' || $model === 'hasManyのモデル名2' ){
$hasMany[] = $model;
}
if($model === 'hasOneのモデル名1'||$model === 'hasOneのモデル名2'){
$hasOne[] = $model;
}
if($model === 'belongsToのモデル名1'||$model === 'belongsToのモデル名2'){
$belongsTo[] = $model;
}
}
if(is_array($hasMany)){
foreach($hasMany as $key =>$value){
$assoc['hasMany'][] = $value;
}
}
if(is_array($hasOne)){
foreach($hasOne as $key =>$value){
$assoc['hasOne'][] = $value;
}
}
if(is_array($belongsTo)){
foreach($belongsTo as $key =>$value){
$assoc['belongsTo'][] = $value;
}
}
$this->unbindModel($assoc,true);
}
return;
}
[/PHP]

コントローラー側で

[PHP]
$this->Item->_unbind('all'); → 全部外れる
$this->Item->_unbind(array('モデル名1','モデル2',); → 指定したのが外れる
[/PHP]

という感じになりました。

ラベル:


0 件のコメント:

コメントを投稿