Je répond à ma première question de moi même, pour insérer un champ en many2many, il suffit de faire dans mon cas : $joueur = new Joueur(); $joueur->Competences[] = $idCompetence; $joueur->Competences[] = $idCompetence2; $joueur->save();
En revanche, je n'ai pas trouvé comment mettre à jour mon champ `utilisations` contenu dans ma table `JoueurCompetence`... faut-il le déclarer dans les relations du schema.yml ? Encore merci par avance On 27 juil, 02:20, Bruno <[email protected]> wrote: > 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 -~----------~----~----~----~------~----~------~--~---
