public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
// code for after save
}
从上面的代码中,我了解到$changedAttributes
方法中的变量afterSave()
与$this->getDirtyAttributes()
相同,对吧?
答案 0 :(得分:2)
不。 getDirtyAttributes()
返回保存对象后的状态,而$changedAttributes
返回保存对象前的状态。 $changedAttributes
还仅包含在save()
或update()
调用期间保存的属性,而不是所有更改的属性。因此,如果您的模型具有两个字段:id
和name
,并且:
save()
,则在afterSave()
中$this->getDirtyAttributes()
将返回空数组(因为对象中没有未保存的更改),而$changedAttributes
将包含这两个属性均具有旧值(因为两个属性均已保存)。save(true, ['id'])
,则$this->getDirtyAttributes()
将返回值为name
的数组(因为此属性已更改,但尚未保存)和{{1} }将包含值为$changedAttributes
的数组(因为此属性已更新)。有关更多见解,您可以参考BaseActiveRecord::updateInternal()
实施。