web-dev-qa-db-fra.com

Yii2 avant sauvegarde vérifier si les attributs sont modifiés

Je veux vérifier si certains attributs de mon modèle sont modifiés dans la méthode beforeSave() en fonction des données stockées dans la base de données.

Existe-t-il des meilleures pratiques pour vérifier si le modèle a changé?

Mon objectif est de faire l'histoire. Si certains attributs changent, j'enregistre une copie dans model_history table.

11
Aleš

Vous pouvez le faire en utilisant afterSave().

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

$changedAttributes enregistre les valeurs des attributs qui ont été modifiés.

9
marche

Vous devez vérifier les attributs sales

Vous pouvez appeler yii\db\ActiveRecord::getDirtyAttributes() pour obtenir les attributs actuellement sales.

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

7
Ripper

Vous devez être prudent, en utilisant la propriété dirtyAttributes car yii, tenez compte des points suivants: avant myfield type int = 4 après myfield type string = "4" si cela se produit, myfield sera automatiquement dans dirtyAttributes.

Autre point: pour vos dirtyAttributes, vos champs doivent être "safeAttributes" dans le scénario où vous allez travailler, autrement, ces changements seront ignorés

cordialement

5