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

Répondre à