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
