Любой, кто придет к этому вопросу, может быть заинтересован в том, как именно я его реализовал, поэтому вот код:
//in the model class
class SomeModel extends CActiveRecord{
...
protected function afterSave(){
parent::afterSave();
if($this->getIsNewRecord()){
$this->append_field=$this->append_field.$this->id;
$this->updateByPk($this->id, array('append_field'=>$this->append_field));
}
}
}
Одним из способов избежать зацикливания события (как упомянуто @schmunk) было использование saveAttributes(...)
внутри метода afterSave()
, но saveAttributes (...) проверяет isNewRecord , и вставляет значение только в том случае, если это новая запись, поэтому мы должны использовать setNewRecord(false);
перед вызовом saveAttributes (...).Я обнаружил, что saveAttributes (...) на самом деле вызывает updateByPk(...)
, поэтому я непосредственно использовал updateByPk (...).