我需要汇总一些子模型数据并将其存储在父模型实例属性中。但是为了保存属性值,我需要调用$this->save()
或者$this->saveAttributes(array('<attr name>'));
它不会永远递归地运行save()
过程,如果不是,为什么不呢?事件模型内部:
protected function afterSave()
{
parent::afterSave();
$contents = EventContent::model()->findAllByAttributes(array('eventId'=>$this->id));
if ($contents)
{
$sum=0;
foreach($contents as $content)
$sum += $content->cost;
$this->totalSum = $sum;
$this->save();
// or $this->saveAttributes(array('totalSum'));
}
}
更新 1
正如乔恩所建议的,我可以这样做:
protected function save()
{
$contents = EventContent::model()->findAllByAttributes(array('eventId'=>$this->id));
if ($contents)
{
$sum=0;
foreach($contents as $content)
$sum += $content->cost;
$this->totalSum = $sum; // no need to run $this->save() here
}
parent::save();
}
更新 2
我更新了我的问题以显示模型的相关代码。我只将子模型的总和累积到父属性中。正如林问的那样,我分享了模型。这里主要是它们的关系: Event(父模型)和EventContent(子模型)与这个关系绑定:
Class EventContent extends CActiveRecord {
...
public function relations()
{
return array(
'event'=>array(self::BELONGS_TO, 'Event', 'eventId'),
);
}
}