繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM