我想检查我的模型中的某些属性是否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 保存已更改的属性的值.
您需要检查脏属性
您可以调用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",否则这些更改将被忽略
问候
| 归档时间: |
|
| 查看次数: |
13777 次 |
| 最近记录: |