11
votes

Comment forcer à rafraîchir la valeur du modèle dans Yii

Disons que j'ai un modèle A avec la relation avec B.

Quand j'écris: xxx

et maintenant b mai par modifié (par d'autres utilisateurs par exemple). Quand j'écris: xxx

Il utilise des valeurs anciennes de B. Ce que je devrais faire pour forcer à rafraîchir la valeur de B avant Dosomething ().


0 commentaires

5 Réponses :


0
votes

Si je comprends bien lorsque la relation B est déclarée dans un modèle d'A, l'objet B est "paresseux chargé" de la base de données lorsque vous appelez $ a-> b. Sauf si c'est être mis en cache (que ce qu'il ne fait pas par défaut, je ne pense pas), il devrait saisir une nouvelle copie de B chaque fois que vous appelez cette relation.

Je m'assurerais que si DOSMATHIAT () est en train de changer Les données de B que vous appelez également $ ceci-> Enregistrer () Inside B-> Dosomething (). Si vous changez B mais que vous ne sauvegardez pas les modifications, alors lorsque vous interrogez pour B, il aura le même ancien contenu. xxx

Si vous souhaitez accéder à nouveau Une fois que vous l'avez changé, mais avant de l'avoir sauvegardé , vous devrez la définir dans une variable dans un "cache", en quelque sorte. Sinon, puisqu'il s'agit d'une nouvelle copie de la base de données lorsque vous appelez $ A-> B (et vous n'avez pas enregistré la modification de DOSOMOD ()), vous aurez les anciennes données. Quelque chose comme ça fonctionnera à la place: xxx

s'il s'agit d'un problème de concurrence générale (ce qui semble comme si vous dites "c'est modifié par un autre utilisateur"), vous Peut avoir besoin d'implémenter une sorte de mécanisme de verrouillage ou d'utiliser des transactions MySQL (via Yii's CDBTransaction) pour assurer l'intégrité des données.

Si rien de cela ne fonctionne, il peut peut-être effectuer une charge "désireuse" réparera votre problème aussi bien. , comme: xxx


0 commentaires

18
votes

YII fournit une méthode de rafraîchissement (), je pense que c'est ce que vous recherchez?

0 commentaires


10
votes

Vous pouvez obtenir une valeur «B» rafraîchie en disant:

$a->getRelated('B',true)->doSomething(); 


0 commentaires

7
votes

dans yii2 c'est juste un simple xxx

donc dans ce cas nonset ($ a-> b)


0 commentaires

0
votes

$ A--> B-> Actualiser (); // Pour rafraîchir uniquement B

$ A--> rafraîchir (); // Pour rafraîchir naturellement toutes les relations, y compris "B"


0 commentaires