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