Bonjour bonjour,
J'ai passé pas mal de temps à chercher des solutions propres pour mon problème et je n'en ai pas trouvées.
Bien sûr j'ai en tête des solutions qui pourraient marcher mais qui ne me semblent pas optimales alors je comptes sur des pros de Doctrine2 pour m'aider !
Situation :
J'ai 2 entitées (une User et une Contacts)
- un User peut contenir plusieurs contacts.
- L'entité (la table) Contacts contient un champ mainContact qui permet de définir si le contact est le contact principal du user ou pas.
- Un seul des contacts ne doit avoir le champ mainContact à 1
Problème :
Je souhaite qu'au moment de persister un contact :
- si celui-ci est en mainContact=1, tous les autres contacts liés à l'utilisateur soient passés automatiquement en mainContact=0
- Si celui-ci est en mainContact=0, il faut vérifier qu'il y a déjà un autre contact avec mainContact=1, sinon on le met automatiquement en mainContact=1.
Solutions envisagées et qui ne semblent pas propres
- Créer une méthode dans le repository qui va mettre à jour tous les autres enregistrements et renvoyé la valeur de mainContact à mettre dans le contact courant
- -> Cette solution obligerait à lancer la méthode à chaque fois qu'on persiste un contact, partout dans l'application.
- Utiliser prepersist et y récupérer l'entitymanager pour faire les traitements
- -> Cette méthode est déconseillée, l'entité ne devrait jamais accéder à l'entitymanager directement
Donc, je n'arrive pas à trouver sur le site de Doctrine de méthode claire pour palier à cette situation. Si d'aventure quelqu'un a déjà eu à faire à ce genre de problèmes et qu'il a trouvé une solution parfaite ce serait cool de m'en faire part !! Vous aurez ma gratitude eternelle
Merci à tous et bonne nuit les insomniaques![]()
Partager