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

时间:2018-08-20 08:20:44

标签: yii2 yii2-model

public function afterSave($insert, $changedAttributes)
{
    parent::afterSave($insert, $changedAttributes);

    // code for after save
}

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

1 个答案:

答案 0 :(得分:2)

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

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

有关更多见解,您可以参考BaseActiveRecord::updateInternal()实施。