afterSave() 中的$changedAttributes是否与 $this->getDirtyAttributes() 相同?


public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
// code for after save
}

从上面的代码中,我了解到afterSave()方法中的变量$changedAttributes$this->getDirtyAttributes()相同,对吧?

No.getDirtyAttributes()返回保存对象后的状态,而$changedAttributes返回保存前的状态。$changedAttributes还仅包含save()update()调用期间保存的属性,而不是所有更改的属性。因此,如果您的模型具有两个字段:idname,以及:

  1. 如果您更改两个字段并调用save(),则在afterSave()$this->getDirtyAttributes()中将返回空数组(因为对象中没有未保存的更改(,而$changedAttributes将包含具有旧值的两个属性(因为两个属性都已保存(。
  2. 如果同时更改字段并调用save(true, ['id']),则$this->getDirtyAttributes()将返回值为name的数组(因为这是已更改的属性,但尚未保存(,$changedAttributes将包含值为id的数组(因为此属性已更新(。

有关更多见解,请参阅BaseActiveRecord::updateInternal()实现。

最新更新