1

当我删除“类型”时,我设置 isActive = 0;

每个“类型”“有很多”“因果”

因此,当禁用一种类型时,我想禁用所有因果关系

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

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

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

$model->save();

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

4

3 回答 3

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();
}

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

于 2012-10-15T13:58:31.540 回答
0

看起来问题出在你的 foreach 循环中,如果你已经设置了一个关系,你应该能够使用 $model->causal 访问它。如果这不起作用,请检查您的关系是否正常工作

$model = $this->loadModel($id);
$model->isActive = 0;
foreach ($model->causal as $item){
   $item->delete();
}
$model->save();
于 2012-10-15T13:56:52.697 回答
0

您的代码顶部是否有以下内容?

Yii::import('application.models.CausalController');

这应该使它成为可能。

同样使用 SuVeRa 的方式删除项目会更好:

foreach ($model->causalsObj as $key => $causal ) {

   $causal->delete(); 

}

或者您可以在 CausalController 中创建一个函数,该函数删除给定 id 的所有因果关系。

于 2012-10-15T21:02:41.027 回答