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
-~----------~----~----~----~------~----~------~--~---