Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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
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
Dernière modification par Doubleslash (13-05-2011 01:24:57)
Hors ligne
Pages: 1