Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-05-2011 17:14:22

propolis
Membre
Date d'inscription: 03-05-2011
Messages: 14

Formulaire Multi tables ou Multi Formulaire ? pour save() et update()

Bonjour,

voici mon dilemme :
Supposons 2 tables liées en one to one :
1 TablePersonnes, avec id, nom, prenom et id_adresse
1 TableAdresse, avec id, rue, codepostal, ville

Maintenant, affichons un formulaire correspondant à 1 Personne, avec en prime son Adresse.
Ca, ça va, avec une requete join.

Maintenant, si mon but est de pouvoir mettre à jour la Personne et/ou son Adresse, en un seul formulaire, est-ce possible, ou dois-je créer 2 formulaires, 1 pour nom+prenom, et 1 pour rue, codepostal et ville ?

Si je rattache tout ça à Zend, en gros est-il possible de créer un Objet Métier qui mixe les 2 tables, ou est-ce que je suis bon pour faire 2  Objets Métier ?


merci !

Hors ligne

 

#2 12-05-2011 17:46:32

nuxwin
Membre
Lieu: Caen (14)
Date d'inscription: 17-03-2011
Messages: 66

Re: Formulaire Multi tables ou Multi Formulaire ? pour save() et update()

Bonjour ;

Premièrement, une relation One To One peut être évitée en fusionnant les deux tables mais ça, je pense que vous le savez déjà. Pour ce qui concerne votre problème, Je ne vois pas très bien le rapport entre le formulaire et la mise à jour de la relation dans votre base de données.

Si votre formulaire fournit les champs de vos deux entités (Une personne, Une adresse), vous pouvez très bien retrouver les deux enregistrements associés dans l'action qui gère le formulaire et effectuer la mise à jour.

Dernière modification par nuxwin (12-05-2011 17:47:02)

Hors ligne

 

#3 13-05-2011 01:18:58

Doubleslash
Membre
Date d'inscription: 28-05-2010
Messages: 10

Re: Formulaire Multi tables ou Multi Formulaire ? pour save() et update()

Bonjour,
A mon avis, le mieux reste de créer les deux objets. C'est en tout cas ce que je fais dans mes premiers développement Zend, mais peut-être existe-t-il d'autres solutions ?

=> Chaque row chargé peut ainsi disposer de sa méthode "getForm()" perso qui va générer 2 subforms qu'il faut associer dans un seul et unique formulaire généré par le controller.

=> Chaque subforms peut être ainsi récupéré à la validation par le contrôller, avec un simple $form->getValue('fomrPersonnes'); / $form->getValue('fomrAdresse');

=> Les valeurs ainsi récupérées peuvent être passée directement à une fonction d'update perso qui va gérer toutes les valeurs et va les mettre à jour lors du save.

Il est aussi possible de créer un objet commun à plusieurs tables qui va étendre Zend_Db_Table_Row_Abstract, et sera étendu par vos objets métiers. Cela permet par exemple de partager la foncton d'update personnalisée et ainsi de ne pas s'en encombrer plus d'une fois.

Je recommanderai par ailleurs cette architecture :
models/Table
--------/Rowset
--------/Row
--------/Forms

Cela permet de bien définir ces formulaires comme étant dédiés aux bases de donnée, et de ne pas les confondre avec des formulaires plus gadget ou qui vont avoir des missions plus précise.

J'attends avec impatience l'avis des autres, car c'est un problème que j'ai résolu ainsi il y a peu, mais n'ayant pas fini mon développement j'entends bien corriger ma méthode si elle n'est pas la plus efficace/évolutive.

Bonne soirée,
Bruno.

Edit : Je rajouterai qu'il est aussi sans doute possible de créer une view sur mysql (mais n'étant pas spécialiste, je ne m'y suis pas aventuré encore), qui permet de regrouper dans la même "table" plusieurs tables reliées entres-elles, d'y faire des insertion, et des updates. C'est peut-être aussi une piste à explorer, je ne sais pas si c'est interprété correctement par ZF par contre : si quelqu'un à déjà des recherches dessus il peut compléter mon avis, je n'ai pas regardé en fait... C'est juste une idée, comme ça wink

Dernière modification par Doubleslash (13-05-2011 01:24:57)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages