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

Répondre à