Ah alors je comprends la confusion. 
Dans Propel, le schema décrit plutôt les tables même alors que dans Doctrine
le schéma décrit plutôt les classes.

Tu devrais repartir de zéro pour l'écriture de ton schema.yml.

Ou ce que tu peux faire et qui te simplifiera peut-être la vie : 
  - génération du schema.yml à partir d'une base gérant les clés étrangères
(MySQL innoDB par exemple)
  - correction du schema.yml ainsi généré.

Par contre, pour que tes relations remontent dans le schema.yml, il faut
qu'elles soient explicitent dans la base (d'où l'utilisation du innoDB)
quitte à générer la base avec l'ancien projet sur un système DB compatible.

-----Message d'origine-----
De : [email protected] [mailto:[email protected]] De la
part de Cyril FLIELLER
Envoyé : jeudi 17 mars 2011 10:21
À : [email protected]
Objet : Re: [symfony-fr] [Doctrine] Clé primaire étrangère

Je suis plutôt à l'aise avec la programmation objet, ce n'est pas un
problème. En fait, je débute avec symfony, et les noms de tables et classes,
je les ai laissé comme ça parce que je reprend un projet qui utilise propel,
et je dois passer à Doctrine. Et je précise que mon seul problème est la
génération de mes tables, le reste devrai plutôt bien se passer. Et je te
l'accorde volontier, les singulier/pluriel dans ce schema.yml sont à coté de
la plaque.

Cyril FLIELLER



Le 17 mars 2011 10:11, Lélio ML <[email protected]> a écrit :


        Rapidement :
        
        Au début de chaque description de tes tables, mets une majuscule et
mets au
        singulier le nom des classes : par exemple Mission, AbsenceHistory
au lieu
        de missions, absenceshistory. En effet, le premier nom désigne la
classe qui
        sera générée. Et tu crées des missions une par une : $mission = new
        Mission() et non pas $mission = new missions()...
        
        Ensuite, dans tes relations, il faut faire attention également de
quoi tu
        parles. Dans le schema.yml on ne fait pas de relations entre tables
mais
        entre classes et ce sera traduit par Doctrine en relations
ForeignKey.
        Donc la relation : le nom de la classe. Si c'est une relation 1 à
plusieurs
        tu peux mettre le pluriel (par exemple : plusieurs missions pour une
absence
        du coup dans Absence tu mets une relation Missions) mais alors il te
faut
        préciser quelle classe est concernée par la relation (parce que
Mission est
        différents de Missions).
        
        Ensuite, va refaire un tour sur la doc de Symfony. Elle est bien
faite et en
        la suivant bien tu découvriras pourquoi ça ne marche pas.
        Si jamais tu n'es pas à l'aise avec la programmation objet,
renseigne-toi
        car Symfony sans maitrise de la programmation objet ça va être
difficile et
        tu risques de faire des erreurs...
        

        -----Message d'origine-----
        De : [email protected]
[mailto:[email protected]] De la
        part de Cyril FLIELLER
        
        Envoyé : jeudi 17 mars 2011 09:32
        
        À : [email protected]
        Objet : Re: [symfony-fr] [Doctrine] Clé primaire étrangère
        
        Voilà le fichier schema.yml
        
        Cyril FLIELLER
        
        
        
        Le 17 mars 2011 09:22, alex baron <[email protected]> a écrit :
        
        
               tu peux nous montrer ton code !
        
               Alexandre Baron
        
        
        
        
               Le 17 mars 2011 08:46, Cyril FLIELLER
<[email protected]> a
        écrit :
        
        
                       Franchement c'est incompréhensible, j'ai beau décrire
le
        plus précisément mes tables, le résultat est le même. Impossible de
définir
        une clé primaire étrangère.
        
                       Cyril FLIELLER
        
        
        
                       Le 17 mars 2011 07:08, alex baron
<[email protected]> a
        écrit :
        
        
                               Un bon exemple parle toujours mieux dans
        sfDocrineGuard il y a un fichier schema.yml qui devrait te permettre
de
        comprendre comment reproduire le type de relation que tu veux créer.
                               === table d'association user et group ===
                               sfGuardUserGroup:
                                 options:
                                   symfony:
                                     form:   false
                                     filter: false
                                   collate: utf8_unicode_ci
                                   charset: utf8
                                 actAs: [Timestampable]
                                 columns:
                                   user_id:
        
                                     type: integer
                                     primary: true
                                   group_id:
                                     type: integer
                                     primary: true
                                 relations:
        
                                   sfGuardUser:
                                     local: user_id
                                     onDelete: CASCADE
                                   sfGuardGroup:
                                     local: group_id
                                     onDelete: CASCADE
                               ===le user===
                               sfGuardUser:
                                 actAs: [Timestampable]
                                 options:
                                   collate: utf8_unicode_ci
                                   charset: utf8
                                 columns:
        
                                   id:
                                     type: integer
                                     primary: true
        
                                     autoincrement: true
                                   username:
                                     type: string(128)
                                     notnull: true
                                     unique: true
                                   algorithm:
                                     type: string(128)
                                     default: sha1
                                     notnull: true
                                   salt: string(128)
                                   password: string(128)
                                   is_active:
                                     type: boolean
                                     default: 1
                                   is_super_admin:
                                     type: boolean
                                     default: false
                                   last_login:
                                     type: timestamp
                                   type:
                                     type:   string(255)
                                 indexes:
                                   is_active_idx:
                                     fields: [is_active]
                                 relations:
                                   TypeUser:
                                     class:    agrConfigTypeUser
                                     local:    type
                                     foreign:  key_label
                                   groups:
                                     class: sfGuardGroup
                                     local: user_id
                                     foreign: group_id
                                     refClass: sfGuardUserGroup
                                     foreignAlias: Users
                                   permissions:
                                     class: sfGuardPermission
                                     local: user_id
                                     foreign: permission_id
                                     refClass: sfGuardUserPermission
                                     foreignAlias: Users
        
                               ===le groupe===
                               sfGuardGroup:
                                 actAs: [Timestampable]
                                 options:
                                   collate: utf8_unicode_ci
                                   charset: utf8
                                 columns:
        
                                   id:
                                     type: integer
                                     primary: true
        
                                     autoincrement: true
                                   name:
                                     type: string(255)
                                     unique: true
                                   description: string(1000)
                                 relations:
                                   users:
                                     class: sfGuardUser
                                     refClass: sfGuardUserGroup
                                     local: group_id
                                     foreign: user_id
                                     foreignAlias: Groups
                                   permissions:
                                     class: sfGuardPermission
                                     local: group_id
                                     foreign: permission_id
                                     refClass: sfGuardGroupPermission
                                     foreignAlias: Groups
        
                               Alexandre Baron
        
        
        
        
        
                               Le 16 mars 2011 21:16, Lélio
<[email protected]>
        a écrit :
        
        
                                       Hé bien ça permet de connaitre
explicitement
        et de contrôler les getter et setter vers les objets liés. Si la
relation
        n'est pas explicite, les getter et setter ne seront pas (a priori)
créés
        dans les classes Base...
        
        
                                       From: Cyril FLIELLER
                                       Sent: Wednesday, March 16, 2011 8:47
PM
                                       To: [email protected]
                                       Subject: Re: [symfony-fr] [Doctrine]
Clé
        primaire étrangère
        
        
        
                                       À quoi cela sert-il de définir les
relations
        de type many ? Dans un sens c'est de la redondance non ?
        
                                       Cyril FLIELLER
        
        
        
                                       Le 16 mars 2011 18:00, Lélio ML
        <[email protected]> a écrit :
        
                                       Alors décrit tes relations de manière
plus
        complète. Et attention, le nom de
                                       la relation sera repris par les
getter et
        setter et si elle n'est pas
                                       préciser la classe à laquelle se
rapporte la
        relation. Il te manque
                                       peut-être des majuscules aux bons
endroits
        pour que ça marche nickel.
        
                                       Par exemple :
                                       Customer:
                                       ...
        
                                       Phase:
                                       ...
        
                                       Business:
                                       relations:
                                        Customer:
                                          class:                  Customer
                                          local:
customer_id
                                          foreign:                id
                                          type:                   one
                                        Phases:
                                          class:                  Phase
                                          local:                  id
                                          foreign:
business_id
                                          type:                   many
        
        
        
                                       -----Message d'origine-----
                                       De : [email protected]
        [mailto:[email protected]] De la
                                       part de Cyril FLIELLER
        
                                       Envoyé : mercredi 16 mars 2011 17:43
        
                                       À : [email protected]
        
                                       Objet : RE: [symfony-fr] [Doctrine]
Clé
        primaire étrangère
        
        
                                       Mais mon 1er exemple marche ! C'est
le
        deuxième qui ne marche pas. Ce qui
                                       est plutôt bizarre car si doctrine
sait
        gérer une double clé primaire
                                       étrangère pourquoi pas une seule.
        
                                       Le 16 mars 2011 17:37, "Lélio ML"
        <[email protected]> a écrit :
        
        
                                               Il me semble que tu veux
gérer des
        utilisateurs. A moins que ce ne
                                               soit pas les utilisateurs de
        l'application (et je te prie de m'excuser
                                               alors de ma méprise), le
plugin
        sfGuard gère les utilisateurs, les
                                               groupes et les permissions de
        l'application.
        
                                               Sinon, il faut savoir que
        Symfony/Doctrine n'apprécient pas du tout
                                               les clés multiples.
                                               Pour contourner ce soucis, je
laisse
        un id comme clé primaire et je
                                               mets un index unique sur les
champs
        qui auraient du être dans la clé
        
        
                                       multiple.
        
        
        
        
        
                                               -----Message d'origine-----
                                               De :
[email protected]
        [mailto:[email protected]]
                                               De la part de Cyril FLIELLER
Envoyé
        : mercredi 16 mars 2011 17:30 À :
                                               [email protected]
Objet :
        Re: [symfony-fr] [Doctrine] Clé
                                               primaire étrangère
        
                                               J'avoue ne pas bien comprend
à quoi
        va me servir sfDoctrineGuard ici ?
        
                                               Cyril FLIELLER
        
        
        
                                               Le 16 mars 2011 17:26, Lélio
ML
        <[email protected]> a écrit :
        
        
                                               Pourquoi ne pas utiliser le
plugin
        sfDoctrineGuard ?
        
                                               -----Message d'origine-----
                                               De :
[email protected]
        
[mailto:[email protected]]
        De la part de Cyril FLIELLER
                                               Envoyé : mercredi 16 mars
2011 17:23
        À : [email protected]
                                               Objet : [symfony-fr]
[Doctrine] Clé
        primaire étrangère
        
        
                                               J'ai un souci en définissant
mon
        fichier yml, je n'obtiens pas le SQL
                                               voulu.
        
                                               J'arrive à créer une table
avec pour
        deux clés primaires étrangères
                                               sans souci pour stocker des
groupes
        d'utilisateurs. J'ai en gros :
        
                                               groups:
                                               columns:
                                               label: { type: string(255),
notnull:
        true }
                                               persons:
                                               columns:
                                               email: { type: string(255),
notnull:
        true }
                                               lastname: { type:
string(255),
        notnull: true }
                                               firstname: { type:
string(255),
        notnull: true }
        
                                               membersgroups:
                                               columns:
                                               person_id: { type: integer,
primary:
        true }
                                               group_id: { type: integer,
primary:
        true }
                                               relations:
                                               persons: { onDelete: CASCADE,
local:
        person_id, foreign:
                                               id }
                                               groups: { onDelete: CASCADE,
local:
        group_id, foreign: id }
        
                                               Ça nickel, ça marche.
        
                                               Mais par contre, je veux
créer une
        autre table avec une clé primaire
                                               étrangère et deux autres clés
        étrangères et là c'est le drame !
        
                                               absences:
                                               columns:
                                               .........
        
                                               missions:
                                               columns:
                                               absence_id: { type: integer,
        primary: true }
                                               transport_id: { type:
integer,
        notnull: true }
                                               entite_id: { type: integer }
                                               relations:
                                               absences: { local:
absence_id,
        foreign: id }
                                               transport: { onDelete:
CASCADE,
        local: transport_id, foreign: id }
                                               entite: { onDelete: CASCADE,
local:
        entite_id, foreign: id }
        
                                               Et là, donc, c'est le drame,
niveau
        SQL ça ne me génère pas la
                                               contrainte de clé étrangère
sur ma
        table absence.
        
        
        
        
        
        
                                               Cyril FLIELLER
        
        
        
                                               --
                                               Vous recevez ce message, car
vous
        êtes abonné au groupe Google Groupes
                                               Symfony-fr.
                                               Pour envoyer un message à ce
groupe,
        adressez un e-mail à
                                               [email protected].
                                               Pour vous désabonner de ce
groupe,
        envoyez un e-mail à l'adresse
        
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> >
        
        
        
        
        symfony-fr+<mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > >
        




        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> >
        
        
        
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > > > .
        



                                               Pour plus d'options,
consultez la
        page de ce groupe :
        
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
                                               --
                                               Vous recevez ce message, car
vous
        êtes abonné au groupe Google Groupes
                                               Symfony-fr.
                                               Pour envoyer un message à ce
groupe,
        adressez un e-mail à
                                               [email protected].
                                               Pour vous désabonner de ce
groupe,
        envoyez un e-mail à l'adresse
        
        [email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> >
        
        
        
        
        
        symfony-fr+<mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > >
        




        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> >
        
        
        
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > > > .
        



                                               Pour plus d'options,
consultez la
        page de ce groupe :
        
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
                                               --
                                               Vous recevez ce message, car
vous
        êtes abonné au groupe Google Groupes
                                               Symfony-fr.
                                               Pour envoyer un message à ce
groupe,
        adressez un e-mail à
                                               [email protected].
                                               Pour vous désabonner de ce
groupe,
        envoyez un e-mail à l'adresse
        
        [email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> >
        
        
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > > .
        
        
                                               Pour plus d'options,
consultez la
        page de ce groupe :
        
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
                                               --
                                               Vous recevez ce message, car
vous
        êtes abonné au groupe Google Groupes
        
        
                                       Symfony-fr.
        
        
                                               Pour envoyer un message à ce
groupe,
        adressez un e-mail à
        
        
                                       [email protected].
        
        
                                               Pour vous désabonner de ce
groupe,
        envoyez un e-mail à l'adresse
        
        
        
[email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> >
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > > .
        
        
                                               Pour plus d'options,
consultez la
        page de ce groupe :
        
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                                       --
                                       Vous recevez ce message, car vous
êtes
        abonné au groupe Google Groupes
                                       Symfony-fr.
                                       Pour envoyer un message à ce groupe,
        adressez un e-mail à
                                       [email protected].
                                       Pour vous désabonner de ce groupe,
envoyez
        un e-mail à l'adresse
        
[email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
                                       Pour plus d'options, consultez la
page de ce
        groupe :
        
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
                                       --
                                       Vous recevez ce message, car vous
êtes
        abonné au groupe Google Groupes Symfony-fr.
                                       Pour envoyer un message à ce groupe,
        adressez un e-mail à [email protected].
                                       Pour vous désabonner de ce groupe,
envoyez
        un e-mail à l'adresse [email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
                                       Pour plus d'options, consultez la
page de ce
        groupe : http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
                                       --
                                       Vous recevez ce message, car vous
êtes
        abonné au groupe Google Groupes Symfony-fr.
                                       Pour envoyer un message à ce groupe,
        adressez un e-mail à [email protected].
                                       Pour vous désabonner de ce groupe,
envoyez
        un e-mail à l'adresse [email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
                                       Pour plus d'options, consultez la
page de ce
        groupe : http://groups.google.com/group/symfony-fr?hl=fr
        
                                       --
        
                                       Vous recevez ce message, car vous
êtes
        abonné au groupe Google Groupes Symfony-fr.
                                       Pour envoyer un message à ce groupe,
        adressez un e-mail à [email protected].
                                       Pour vous désabonner de ce groupe,
envoyez
        un e-mail à l'adresse [email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
                                       Pour plus d'options, consultez la
page de ce
        groupe : http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
        
                               --
        
                               Vous recevez ce message, car vous êtes abonné
au
        groupe Google Groupes Symfony-fr.
                               Pour envoyer un message à ce groupe, adressez
un
        e-mail à [email protected].
                               Pour vous désabonner de ce groupe, envoyez un
e-mail
        à l'adresse [email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
                               Pour plus d'options, consultez la page de ce
groupe
        : http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                       --
        
                       Vous recevez ce message, car vous êtes abonné au
groupe
        Google Groupes Symfony-fr.
                       Pour envoyer un message à ce groupe, adressez un
e-mail à
        [email protected].
                       Pour vous désabonner de ce groupe, envoyez un e-mail
à
        l'adresse [email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
                       Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
               --
               Vous recevez ce message, car vous êtes abonné au groupe
Google
        Groupes Symfony-fr.
               Pour envoyer un message à ce groupe, adressez un e-mail à
        [email protected].
               Pour vous désabonner de ce groupe, envoyez un e-mail à
l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
               Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        --
        Vous recevez ce message, car vous êtes abonné au groupe Google
Groupes
        Symfony-fr.
        Pour envoyer un message à ce groupe, adressez un e-mail à
        [email protected].
        Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> .
        Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        --
        Vous recevez ce message, car vous êtes abonné au groupe Google
Groupes Symfony-fr.
        Pour envoyer un message à ce groupe, adressez un e-mail à
[email protected].
        Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
[email protected]
<mailto:symfony-fr%[email protected]> .
        Pour plus d'options, consultez la page de ce groupe :
http://groups.google.com/group/symfony-fr?hl=fr
        
        


--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
Symfony-fr.
Pour envoyer un message à ce groupe, adressez un e-mail à
[email protected].
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
[email protected].
Pour plus d'options, consultez la page de ce groupe :
http://groups.google.com/group/symfony-fr?hl=fr


-- 
Vous recevez ce message, car vous êtes abonné au groupe Google 
Groupes Symfony-fr.
Pour envoyer un message à ce groupe, adressez un e-mail 
à [email protected].
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse 
[email protected].
Pour plus d'options, consultez la page de ce groupe : 
http://groups.google.com/group/symfony-fr?hl=fr

Répondre à