beforeDelete函数不起作用

时间:2013-05-10 15:28:49

标签: php yii

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

我刚刚更新了我的代码,但它还没有运行。

2 个答案:

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