Yii:如何从另一个控制器动作中调用控制器动作?

rea*_*ebo 1 php yii

当我删除'type'时我设置了isActive = 0;

每种"类型"都有很多"因果关系"

因此,当禁用某种类型时我想禁用每一个因果关系

类型控制器中我正在尝试这个

$model = $this->loadModel($id);
$model->isActive = 0;

foreach ($model->causalsObj as $key => $causal ) {
   $causal = CausalController::delete($causal->id);
}

$model->save();
Run Code Online (Sandbox Code Playgroud)

这不起作用(在ajax调用期间PHP错误)

Asg*_*oth 5

这应该进入模型,而不是控制器,我会使用afterSave.所以在CasualType中:

public function afterSave(){
   if(!$this->isActive){
       Casual::model()->deleteAll('type_id = '.$this->id);
   }

   return parent::afterSave();
}
Run Code Online (Sandbox Code Playgroud)

如果您实际上并不意味着"删除"但是停用,您仍然可以使用CActiveRecord :: updateAll在一个查询中执行此操作:

public function afterSave(){
   if(!$this->isActive){
       Casual::model()->updateAll(array('isActive' => 0), 'type_id = '.$this->id);
   }

   return parent::afterSave();
}
Run Code Online (Sandbox Code Playgroud)

在另一个控制器中实例化控制器没有意义,控制器可以处理用户请求,而不是保存业务逻辑