当我删除'type'时,我设置了isActive = 0;
每个“类型”都有很多“因果关系”
因此,当禁用某种类型时,我希望禁用每个因果关系
在类型控制器中我正在尝试此
$model = $this->loadModel($id);
$model->isActive = 0;
foreach ($model->causalsObj as $key => $causal ) {
$causal = CausalController::delete($causal->id);
}
$model->save();
这不起作用(在ajax调用期间出现PHP错误)
答案 0 :(得分:5)
那应该进入模型,而不是控制器,我会使用afterSave。所以在CasualType:
public function afterSave(){
if(!$this->isActive){
Casual::model()->deleteAll('type_id = '.$this->id);
}
return parent::afterSave();
}
如果您实际上并不是指'删除'而是停用,则您仍然可以使用CActiveRecord::updateAll在一个查询中执行此操作:
public function afterSave(){
if(!$this->isActive){
Casual::model()->updateAll(array('isActive' => 0), 'type_id = '.$this->id);
}
return parent::afterSave();
}
在另一个控制器中实例化控制器没有意义,控制器可以处理用户请求,而不是保存业务逻辑
答案 1 :(得分:0)
看起来问题出在你的foreach循环中,如果你已经建立了关系,你应该可以使用$ model->因果访问它。如果这不起作用,请检查您的关系是否正常工作
$model = $this->loadModel($id);
$model->isActive = 0;
foreach ($model->causal as $item){
$item->delete();
}
$model->save();
答案 2 :(得分:0)
您的代码顶部是否有以下内容?
Yii::import('application.models.CausalController');
这应该可以实现。
同样使用SuVeRa删除项目的方式会更好:
foreach($ model-> causalsObj as $ key => $ causal){
$causal->delete();
}
或者您可以在CausalController中创建一个函数,删除给定id的所有因果关系。