0

有以下具有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();

我刚刚更新了我的代码,但它还没有工作。

4

2 回答 2

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在其评论中所说,这是最好的选择。

正如凯文希金斯在回答中所说,你应该 return 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

于 2013-05-10T16:32:39.577 回答
1

除了您的原始删除代码错误之外,您还应该返回 parent::beforeDelete(); 的结果。

您的代码应如下所示(使用烧酒的第三条建议):

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();
}
于 2013-05-10T19:53:31.267 回答