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

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



Attachment: signature.asc
Description: OpenPGP digital signature

Répondre à