Bonjour Jason,
mon problème n'est pas dans l'affichage de la chaine mais dans la clé
utilisée comme valeur de chaque option pour le object_select_tag() : c'est
toujours la clé primaire qui est utilisée et on ne peut pas actuellement
indiquer d'autre methode à utiliser pour récupérer une autre clé
(courtier_id dans mon cas).
Mais je viens de fouiller dans le code source de symfony puis dans trac sur
le site officiel et j'ai trouvé un ticket ouvert la semaine dernière (#1751)
avec un patch qui sera intégré dans la version 1.0.3 pour justement
permettre d'utiliser une autre méthode que celle qui récupère la clé
primaire pour servir de valeur pour chaque option, donc c'est super :)
En revanche ça n'explique pas pourquoi si je n'indique pas de jointure
explicitement grâce à peer_method, celle qui est alors faite en 2 temps ne
se sert pas du bon champ. Je continue de chercher...
On 5/24/07, jason <[EMAIL PROTECTED]> wrote:
>
>
> bonjour colin,
> definir une fonction __toString() permet de remplaer l'id par la valeur
> retournée par ton toString() dans totn interface
> je pense que c'est la bonne methose pour regler ton probleme
>
> Colin a écrit :
> > Bonjour,
> >
> >
> > dans un module de backend, je souhaite utiliser un filtre sur une clé
> > étrangère. Je suis arrivé à obtenir ce que je voulais pour
> > l'affichage, cependant le filtre fait la recherche sur le champ ID de
> > la table étrangère et non sur la référence étrangère que j'ai
> > renseignée dans le schema.yml.
> >
> > Voici un extrait de mon schema.yml:
> >
> > db_courtiers:
> > courtier_profil:
> > _attributes: { phpName : CourtierProfil }
> > id:
> > courtier_id: { type: integer, index: true }
> > ...
> >
> > courtier_histo_solde:
> > _attributes: { phpName: CourtierHistoSolde }
> > id:
> > courtier_id: { type: integer, index: true, foreignTable:
> > courtier_profil, foreignReference: courtier_id, onDelete: cascade }
> > ...
> >
> > et un extrait de mon generator.yml :
> >
> > generator:
> > class: sfPropelAdminGenerator
> > param:
> > model_class: CourtierHistoSolde
> > theme: default
> >
> > list:
> > peer_method: doSelectJoinCourtierProfil
> > display: [courtier_profil, =_list_date, operation,
> _montant]
> > filters: [courtier_id, date]
> >
> >
> > A l'affichage dans le filtre, j'ai bien un select avec la liste des
> > noms des courtiers (grâce à la méthode __toString de CourtierProfil).
> > Cependant les valeurs des options ne prennent pas le courtier_id mais
> > l'id de la table courtier_profil. Donc forcément les recherches ne me
> > donnent pas le résultat attendu.
> >
> > Dans filters, si je met courtier_profil à la place de courtier_id
> > (pour avoir comme dans display), je n'ai plus aucun select (logique,
> > quoique j'aurais pensé que la jointure se ferait comme dans le display
> > grâce peer_method).
> >
> > Alors j'ai créé un partial filter qui génère les selects avec les
> > bonnes options, mais comme je vais devoir utiliser ce même filtre dans
> > une dizaine de modules, j'ai pensé qu'il y avait peut-être une syntaxe
> > possible dans le generator.yml pour que le filtre fasse de lui-même
> > les bonnes jointures.
> >
> >
> > Pour finir il y a quelque chose que je ne comprend pas : si j'enlève
> > la ligne peer_method, d'autres requêtes sont donc nécessaires pour
> > exécuter __toString() de CourtierProfil mais là non plus la "jointure"
> > n'est pas correcte : elle ne se fait pas sur courtier_id mais sur l'id
> > de la table courtier_profil... Ce que je ne comprend pas c'est
> > pourquoi la jointure déclarée avec peer_method fonctionne alors que si
> > je l'enlève, la jointure "en deux temps" sur courtier_profil n'est pas
> > correcte. En d'autres termes, pourquoi faut-il que passer par
> > peer_method pour respecter foreignReference que j'ai indiqué et qui ne
> > correspond pas au champ id de foreignTable ?
> >
> >
> > Merci d'avance pour vos explications, j'espère avoir été suffisamment
> > clair...
> >
> >
> > Bonne journée,
> >
> > Colin
> >
> > >
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "Symfony-fr"
de Google Groupes.
Pour transmettre des messages à ce groupe, envoyez un e-mail à
l'adresse [email protected]
Pour résilier votre abonnement à ce groupe, envoyez un e-mail à
l'adresse [EMAIL PROTECTED]
Pour afficher d'autres options, visitez ce groupe à l'adresse
http://groups.google.com/group/symfony-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---