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

Répondre à