保存前检查Yii2是否更改了属性

Ale*_*leš 9 php model yii2

我想检查我的模型中的某些属性是否beforeSave()根据存储在数据库中的数据在方法中更改.

是否有一些最佳实践来检查模型是否已更改?

我的目标是创造历史.如果某些属性发生更改,我会将副本保存到model_history表中.

小智 9

你实际上可以使用它afterSave().

public function afterSave($insert, $changedAttributes) {
    parent::afterSave($insert, $changedAttributes);
    if(!$insert) {
        // your code here like $changedAttributes['myField'];
    }
}
Run Code Online (Sandbox Code Playgroud)

$changedAttributes 保存已更改的属性的值.


Rip*_*per 8

您需要检查脏属性

您可以调用yii\db\ActiveRecord::getDirtyAttributes()以获取当前脏的属性。

http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#dirty-attributes


小智 5

你必须小心,使用dirtyAttributes属性,因为警予,考虑以下因素:MyField的字符串类型="4"如果它发生后MyField的int类型= 4之前MyField的将是进入dirtyAttributes自动.

其他要点:对于您的dirtyAttributes,您的字段应该是您将要工作的场景中的"safeAttributes",否则这些更改将被忽略

问候