2017-10-18 4 views
0

Nous avons 2 modèles:yii2 modèles liés validate

  • Ordre
  • OrderItems

Ainsi lors de l'enregistrement des OrderItems connexes dont j'ai besoin de vérifier certains attributs de l'Ordre parent.

L'ordre a des attributs: "time_begin" et "time_end" et OrderItem a ses propres "time_begin" et "time_end". Donc la règle est que les temps de l'OrderItem doivent être entre les temps de l'Ordre parent.

Par exemple, j'ai la situation suivante:

  • utilisateur change la « TIME_END » de l'Ordre à la plus grande valeur et modifie la « TIME_END » de OrderItem à valeur plus grande trop
  • essayer de sauver Cependant, lorsque OrderItem essaye de valider son "time_end", il prend l'ancienne valeur de la propriété Order-> time_end et donne une erreur de validation! !!

Une solution? Comment indiquer à OrderItem que l'ordre a changé?

+0

créez votre propre validateur. – lucas

Répondre

0

C'est un problème compliqué, vous pouvez considérer de cette façon: - Ne pas appeler Order :: validate() et OrderItems :: validate() simultanément. - Order :: validate() -> Commande :: save() d'abord que OrderItems :: validate() -> OrderItems :: save() (est-ce échoué, n'oubliez pas de rétablir l'ordre si nécessaire)

+0

Merci pour la réponse! Nous avons pensé à cela, peut-être que c'est la seule décision ... Nous utilisons même la transaction pour enregistrer le modèle associé, afin que nous puissions revenir en arrière si quelque chose s'est mal passé dans OrderItems :: validate() ou save() – Vld