データベースに保存されているデータに従って、モデルの一部の属性がbeforeSave()
メソッドで変更されているかどうかを確認したいと思います。
モデルが変更されたかどうかを確認するためのベストプラクティスはありますか?
私の目標は歴史を作ることです。一部の属性が変更された場合は、model_history
テーブルにコピーを保存します。
実際には、afterSave()
を使用してそれを行うことができます。
public function afterSave($insert, $changedAttributes) {
parent::afterSave($insert, $changedAttributes);
if(!$insert) {
// your code here like $changedAttributes['myField'];
}
}
$changedAttributes
は、変更された属性の値を保存します。
汚れた属性をチェックする必要があります
yii\db\ActiveRecord::getDirtyAttributes()
を呼び出して、現在ダーティな属性を取得できます。
http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#dirty-attributes
Yiiは次のことを考慮しているため、dirtyAttributesプロパティを使用することに注意する必要があります。myfieldタイプの前にint = 4 myfieldタイプの文字列= "4"の場合。
その他の点:作業するシナリオでは、dirtyAttributesのフィールドは「safeAttributes」である必要があります。それ以外の場合、この変更は無視されます。
よろしく