There is the following model Task with beforeDelete
function:
public function beforeDelete()
{
$model=Proposal::model()->findAllByAttributes(array('task_id'=>$this->id));
$model->updateAll(array('task_id'=>null, 'task_result'=>null));
parent::beforeDelete();
}
As you can see, I'd like to get some records from Proposal
model (using task_id
field) and update some fields in sorted records. But this code doesn't work - tasks are deleted from task table without updating the fields in proposal table. How can I fix it?
UPDATED:
$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();
I've just updated my code, but it doesn't work yet.
You should simply try (no need to use findAllByAttributes
) :
Proposal::model()->updateAll(
array('task_id'=>null, 'task_result'=>null),
'task_id=:task_id',
array(':task_id'=>$this->id)
);
return parent::beforeDelete();
As DCoder said in its comment, it is the best option.
And as Kevin Higgins said in its answer, you should return parent::beforeDelete()
.
http://www.yiiframework.com/doc/api/1.1/CActiveRecord#updateAll-detail
Or if you still want to use 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
Or :
$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
In addition to your original deletion code being wrong, you should be returning the result of parent::beforeDelete();
Your code should look like this (using soju's third recommendation):
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();
}