[英]Yii: how to invoke a controler action from inside another controller action?
当我删除“类型”时,我设置为isActive = 0;
每个“类型”“都有很多”“因果关系”
因此,在禁用类型时,我想禁用所有因果关系
在类型控制器中,我正在尝试
$model = $this->loadModel($id);
$model->isActive = 0;
foreach ($model->causalsObj as $key => $causal ) {
$causal = CausalController::delete($causal->id);
}
$model->save();
这不起作用(ajax调用期间PHP错误)
那应该进入模型,而不是控制器,我要使用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();
}
在另一个控制器中实例化一个控制器没有意义,控制器在那里处理用户请求,而不是保留您的业务逻辑
看来问题出在您的foreach循环中,如果您已经建立了一个关系,则应该可以使用$ model-> causal访问它。 如果这样不起作用,请检查您的关系是否正常工作
$model = $this->loadModel($id);
$model->isActive = 0;
foreach ($model->causal as $item){
$item->delete();
}
$model->save();
您的代码顶部是否有以下内容?
Yii::import('application.models.CausalController');
这应该使其成为可能。
同样使用SuVeRa的方法删除项目会更好:
foreach($ model-> causalsObj as $ key => $ causal){
$causal->delete();
}
或者,您可以在CausalController中创建一个函数,该函数删除给定ID的所有因果关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.