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

时间:2017-02-27 21:18:27

标签: php model yii2

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

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

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

3 个答案:

答案 0 :(得分:7)

您可以使用afterSave()实际执行此操作。

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

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

答案 1 :(得分:7)

您需要检查脏属性

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

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

答案 2 :(得分:5)

您必须小心,使用dirtyAttributes属性,因为yii,请考虑以下事项: 在myfield类型int = 4之前 在myfield type string =“4”之后 如果它发生,myfield将自动进入dirtyAttributes。

其他观点: 对于您的dirtyAttributes,您的字段在您打算工作的场景中应该是“safeAttributes”,否则这些更改将被忽略

问候