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

时间:2012-10-15 13:24:46

标签: 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();

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

3 个答案:

答案 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的所有因果关系。