有beforeDelete
函数的以下模型任务:
public function beforeDelete()
{
$model=Proposal::model()->findAllByAttributes(array('task_id'=>$this->id));
$model->updateAll(array('task_id'=>null, 'task_result'=>null));
parent::beforeDelete();
}
如您所见,我想从Proposal
模型中获取一些记录(使用task_id
字段)并更新已排序记录中的某些字段。但是此代码不起作用 - 从任务表中删除任务而不更新提议表中的字段。我该如何解决?
更新:
$model=Proposal::model()->findAllByAttributes(array('task_id'=>$this->id));
foreach ($model as $proposal)
{
$proposal->task_id=null;
$proposal->task_result=null;
$proposal->update();
}
parent::beforeDelete();
我刚刚更新了我的代码,但它还没有运行。
答案 0 :(得分:2)
您应该尝试(无需使用findAllByAttributes
):
Proposal::model()->updateAll(
array('task_id'=>null, 'task_result'=>null),
'task_id=:task_id',
array(':task_id'=>$this->id)
);
return parent::beforeDelete();
正如 DCoder 在评论中所说,这是最好的选择。
正如 Kevin Higgins 在答案中所说,你应该回归parent::beforeDelete()
。
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#updateAll-detail
或,如果您仍想使用findAllByAttributes
:
$models = Proposal::model()->findAllByAttributes(array('task_id'=>$this->id));
foreach ($models as $proposal)
{
$proposal->update(array('task_id'=>null, 'task_result'=>null));
}
return parent::beforeDelete();
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#update-detail
或:
$models = Proposal::model()->findAllByAttributes(array('task_id'=>$this->id));
foreach ($models as $proposal)
{
$proposal->task_id=null;
$proposal->task_result=null;
$proposal->save();
}
return parent::beforeDelete();
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#save-detail
答案 1 :(得分:1)
除了您的原始删除代码错误外,您应该返回parent :: beforeDelete();
的结果您的代码应如下所示(使用soju的第三个建议):
public function beforeDelete()
{
Proposal::model()->updateAll(
array('task_id'=>null, 'task_result'=>null),
'task_id=:task_id',
array(':task_id'=>$this->id)
);
return parent::beforeDelete();
}