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


        
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]> > > .
                                
                                

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


        
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]> > > .
                                
                                

                                        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]
<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]
<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 à