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]
>>>
>>
>>  symfony-fr+<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]
>>>
>>
>>  symfony-fr+<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
>>
>>
>>
>>
>> --
>> 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
>>
>>
>  --
> 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 à