|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Nicolas Développeur Web Inscription : avril 2011 Messages : 95 ![]() |
Bonjour,
Aujourd'hui, j'ai du mal !!! Je cherche à faire un save() sur un form qui en embarque un autre. J'ai une table A, une table B et une table intermédiaire AB avec un champ1 et un champ2 (en plus de A.id et B.id). Le form que j'utilise est le form A et j'embarque le formulaire AB dedans pour remplir son champs1 et son champs2 par la même occasion. Lorsque je valide mon formulaire, je veux créer un nouvel enregistrement de A et je veux qu'il soit lié à B. Donc j'ai besoin de créer l'entité A, mais également l'entité de liaison AB. Dans ce formulaire le problème est : comment faire un save() de AB avec tous ces paramètres (notamment A.id) alors que A n'existe pas encore en BDD (et donc n'a pas d'id). J'ai survolé la piste des save(), doSave(), updateObject() etc. qui sont censés gérer ce problème, mais j'avoue m'y être un peu perdu et ne plus retrouver les éléments pour ma situation. Merci d'avance ! |
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Il n'y a pas de solution simple.
En effet le form sauvegarde d'abord les enregistrements embed avant de le faire pour l'enregistrement principale. Modifier ce fonctionnement reviendrait à remonter très loin dans les objets form et doctrine... La solution consiste donc à ce que, à la création, il ne soit pas possible de rajouter des éléments embed. Ce qui n'est pas toujours opportun d'un côté interface et facilité de saisie. Si non, tu as la possibilité de travailler avec un form indépendant et les champs qui te sont nécessaire, et de gérer l'ensemble de la sauvegarde "à la main".
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Nicolas Développeur Web Inscription : avril 2011 Messages : 95 ![]() |
Ça me blesse ce que tu me dis là ...
Si je comprends bien ce que tu me suggères : soit je vais fouiller très loin dans les entrailles de symfony pour surcharger ma méthode de sauvegarde, soit je gère ça à la mano. Partons du principe que je crée mon formulaire classique A, sans embed. Et que je ne veuille pas nécessairement remplir les champs annexes de ma table intermédiaire. J'aurai donc uniquement mon formulaire classique de A que je peux bind, et valider facilement. Le problème initial est le même, je dois toujours lors de cette sauvegarde lier mon A et mon B (l'id de B est défini d'office dans mon processus donc pas de souci de ce coté là). Je vais donc vouloir créer "en cascade" l'entité AB qui va les lier pour ce nouveau A. Il y a bien un moyen de surchage du save() qui permette ça n'est-ce pas ? C'est cette méthode de faire qui m'échappe malgré en avoir parcouru quelques-unes... |
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Jette un œil au code de sauvegarde des form et tu comprendras mieux.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Nicolas Développeur Web Inscription : avril 2011 Messages : 95 ![]() |
Oh j'y suis allé une paire de fois et c'est pas ce qu'il y a de plus sexy je te l'accorde.
Cela dit j'ai réussi à contourner partiellement mon problème. Comme dit précédemment j'ai gardé un formulaire classique, et après le bind, si celui-ci est valide je le save, et je récupère le résultat du save dans une variable. J'ai alors l'objet sauvegardé AVEC l'id en base que je peux alors attribuer à un objet intermédiaire de type AB (même plus besoin de passer par un form) que je save également par la suite. Pour les deux autres champs je les rajouterai manuellement et ferai la validation moi même. Je ne sais pas si c'est la manière la plus académique ... mais pour le moment la première partie fonctionne. |
|
|
00
|
|
|
#6 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Contournement intéressant...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : décembre 2008 Messages : 49 ![]() |
Bonjour,
Je conseille ahDoctrineEasyEmbeddedRelations qui permet de ne pas réinventer la roue. Sinon à coup de embedRelation() et en faisant des unset des champs id si les forms sont new, doctrine gère automatiquement l'ajout (mais pas la suppression, ni la gestion des champs vides etc). |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com