我想根据数据库中存储的数据检查我的模型中的某些属性是否在beforeSave()
方法中更改。
是否有一些最佳做法来检查模型是否已更改?
我的目标是创造历史。如果某些属性发生更改,我会将副本保存到model_history
表中。
答案 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”,否则这些更改将被忽略
问候