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.
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.
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
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