Je reviens vers toi pour deux questions. La première, comment fais-t-on pour faire référence aux champs contenus dans la table de liaison ? Si on reprend mon exemple, on voit que ma table `JoueurCompetence` contient un champ `utilisations` qui permet de stocker le nombre de fois que le joueur a utilisé la compétence. Comment fais-t-on pour y faire référence ? Est-ce que $joueur- >competences->getUtilisations() pourrait marcher ?
Autre question, sûrement un peu bête, mais j'aimerai savoir comment fais-t-on pour insérer une entrée dans la table de liaison ? Et toujours en prenant en compte ce champs `utilisations` ! Je te remercie une fois de plus de ton aide :-) Bruno On 26 juil, 20:59, Colin Darie <[email protected]> wrote: > Il en effet primordial d'un point de vue des performances de surcharger les > getXXX() pour faire la ou les jointures adéquates lorsque les objets > correspondants ont besoin systématiquement de données aggrégées depuis > d'autres tables. C'est d'ailleurs valable quel que soit le type de relation. > > 2009/7/26 Bruno <[email protected]> > > > > > > > Je suis d'accord avec toi sur le principe d'écrire le schéma > > directement en .yml, mais je trouvais l'outils Mysql Workbench > > vraiment intéressant dans la mesure ou il me permettait d'avoir un > > schéma visuel ET une base en parfait harmonie constamment. > > Cependant, il est vrai que je peux toujours faire du "reverse > > engeneering" pour retrouver mon schema à partir de ma base généré > > depuis le .yml... > > > En attendant vos réponses, j'ai fait quelque chose d'autre, j'aimerai > > en connaître ton avis. > > En fait mon problème c'était que lorsque je demandais la table relié > > en many to many, il me généré un surplus de requête pour obtenir les > > infos entrée par entrée, j'ai donc modifié mon fichier > > JoueurCompetenceTable.php pour surcharger la requête > > getJoueurCompetence() et lui faire renvoyer la liste des compétences > > en jointure avec la table joueur_competence. > > L'avantage de cela c'est que je contrôle parfaitement mes requêtes et > > comme je ne touche pas au fichier *Base.php, je n'ai à le faire qu'une > > fois. > > L'inconvénient c'est que je vais devoir surcharger cette méthode > > chaque fois que j'aurai besoin de récupérer une table d'une relation > > many2many, et j'en ai pas mal ! > > > Je vais réfléchir à ta solution à nouveau, et tenter d'écrire mon > > schéma directement en .yml. > > > Merci de tes conseils et de ton temps > > > On 25 juil, 17:42, Colin Darie <[email protected]> wrote: > > > C'est à mon avis normal que la conversion base > schéma ne conserve pas > > > les relations many-to-many car elle ne fait que retranscrire la structure > > > des tables existantes, et aux yeux de la base le m2m n'est rien d'autre > > > que 2 relations one-to-many. > > > > Si tu souhaites continuer à utiliser MySQL Workbench, pour éviter à > > > chaque fois de rajouter ces relations à la main dans le schéma, et si > > > t'es sous un système linux, tu n'as qu'à créer un simple patch qui > > > contient ces quelques lignes supplémentaires, patch que tu n'auras plus > > > qu'à appliquer simplement après chaque génération du schema. Tu peux même > > > écrire une tache symfony qui lancera doctrine:build-schema puis qui > > > appliquera le patch immédiatement après pour tout faire d'un coup. > > > > Autrement je pense que ça vaut vraiment la peine d'investir du temps pour > > > apprendre à écrire directement et rapidement les schemas en yml, ça évite > > > bien des surprises dans ce genre car là ce sont les m2m qui ne sont pas > > > conservées, mais une autre fois ça sera peut-être autre chose dont tu ne > > > te rendras pas forcément compte (sans parler du fait que ça ne t'écrira > > > jamais le yml pour utiliser des behavior !) Une fois qu'on a l'habitude > > > d'écrire les schemas manuellement, ça va vraiment très vite même pour des > > > très grandes structures (rien n'empêche d'ailleurs de modéliser la base > > > par un outil graphique avant si on le souhaite). > > > > 2009/7/24 Bruno <[email protected]>: > > > > > Ok Colin, mais justement, le but de ma question était de savoir si il > > > > n'y avait pas un moyen de rendre cette tache automatique, car sans ça, > > > > je risque de me retaper ce changement à la main à chaque fois que je > > > > veux mettre à jour mon schéma sous Mysql Workbench... > > > > Enfin vous êtes deux à me proposer cette unique solution, je pense que > > > > je n'aurai pas le choix, et c'est bien dommage ! > > > > > Merci de votre aide, mais si quelqu'un passe par là et a une solution, > > > > je suis toujours preneur ! > > > > > Bruno > > > > > On 24 juil, 17:43, Colin Darie <[email protected]> wrote: > > > >> C'est normal que $Joueur->Competence ne marche pas car dans ton schema > > > >> la relation m2m entre Joueur et Competence n'est pas définie. Il faut > > > >> la rajouter manuellement comme on te l'a suggéré. > > > > >> Par exemple : > > > > >> Joueur: > > > >> columns: > > > >> [...] > > > >> relations: > > > >> Competences: > > > >> class: Competence > > > >> refClass: JoueurCompetence > > > >> local: joueur_id > > > >> foreign: competence_id > > > >> foreignAlias: Joueurs > > > > >> Ainsi tu pourras faire $Joueur->Competences qui retournera une > > > >> instance de Doctrine_Collection (ou un tableau) avec toutes les > > > >> compétences. Vice-versa, si t'en as besoin tu pourras faire > > > >> $Competence->Joueurs qui retournera les joueurs d'une compétence > > > >> (grâce au foreignAlias). > > > > >> 2009/7/24 Bruno <[email protected]>: > > > > >> > Bonjour et merci de votre aide, > > > > >> > @[email protected] : > > > >> > Oui la structure est impeccable, toutes les contraintes de clés > > > >> > étrangères sont respectés, et tous les contrôles fonctionnent bien, > > > >> > c'est bien pour ça que je trouve étrange que la génération du schema > > > >> > ne les reproduise pas. > > > > >> > @Lelio ML : > > > >> > Effectivement, pour ma table `JoueurCompetence`, ce sont deux > > > >> > many2one, vers Joueur et Competence qui sont bien reproduit sur le > > > >> > schema.yml. > > > >> > En revanche, ce que je n'arrive pas a faire, c'est récupérer toutes > > > >> > les compétences d'un joueur en faisant Joueur->competence, ce que > > > >> > j'ai > > > >> > vu fonctionner sur un tutoriel. > > > >> > Actuellement je suis oblige de faire $joueur->getJoueurCompetence() > > > >> > et > > > >> > enfin dans ma boucle un $joueurCompetence->getCompetence(), ce qui a > > > >> > pour effet de me générer une nouvelle requête SQL. > > > >> > Peut être que je m'y prend mal quelque part ? > > > >> > Voici l'extrait de mon schema.yml > > > > >> > # Joueur > > > >> > Joueur: > > > >> > tableName: joueur > > > >> > columns: > > > >> > id: > > > >> > type: integer(4) > > > >> > unsigned: 1 > > > >> > primary: true > > > >> > autoincrement: true > > > >> > pseudo: > > > >> > type: string(50) > > > >> > notnull: true > > > > >> > #Competence > > > >> > Competence: > > > >> > tableName: competence > > > >> > columns: > > > >> > id: > > > >> > type: integer(4) > > > >> > unsigned: 1 > > > >> > primary: true > > > >> > autoincrement: true > > > >> > nom: > > > >> > type: string(250) > > > >> > default: '' > > > >> > notnull: true > > > > >> > #JoueurCompetence > > > >> > JoueurCompetence: > > > >> > tableName: joueur_competence > > > >> > columns: > > > >> > competence_id: > > > >> > type: integer(4) > > > >> > unsigned: 1 > > > >> > primary: true > > > >> > joueur_id: > > > >> > type: integer(4) > > > >> > unsigned: 1 > > > >> > primary: true > > > >> > utilisations: > > > >> > type: integer(4) > > > >> > default: '0' > > > >> > notnull: true > > > >> > relations: > > > >> > Joueur: > > > >> > local: joueur_id > > > >> > foreign: id > > > >> > type: one > > > >> > Competence: > > > >> > local: competence_id > > > >> > foreign: id > > > >> > type: one > > > > >> > Encore merci de votre aide > > > > >> > Bruno > > > > >> signature.asc > > > >> < 1 000AfficherTélécharger > > > > signature.asc > > > < 1 000AfficherTélécharger > > > > > > > signature.asc > < 1 000AfficherTélécharger --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
