web-dev-qa-db-ja.com

Yii2保存前に属性が変更されたかどうかを確認

データベースに保存されているデータに従って、モデルの一部の属性がbeforeSave()メソッドで変更されているかどうかを確認したいと思います。

モデルが変更されたかどうかを確認するためのベストプラクティスはありますか?

私の目標は歴史を作ることです。一部の属性が変更された場合は、model_historyテーブルにコピーを保存します。

11
Aleš

実際には、afterSave()を使用してそれを行うことができます。

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

$changedAttributesは、変更された属性の値を保存します。

9
marche

汚れた属性をチェックする必要があります

yii\db\ActiveRecord::getDirtyAttributes()を呼び出して、現在ダーティな属性を取得できます。

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

7
Ripper

Yiiは次のことを考慮しているため、dirtyAttributesプロパティを使用することに注意する必要があります。myfieldタイプの前にint = 4 myfieldタイプの文字列= "4"の場合。

その他の点:作業するシナリオでは、dirtyAttributesのフィールドは「safeAttributes」である必要があります。それ以外の場合、この変更は無視されます。

よろしく