2010-05-20 10 views
0

Résumé: En utilisant le YML suivant, j'obtiens une référence à une clé étrangère (role_id) qui n'est pas dans mon YML.Doctrine comment configurer plusieurs à plusieurs relation

Problème: Je suis en train de créer un système où il y a un utilisateur (CreditName) qui peuvent appartenir à un grand nombre de rôle (qui peuvent tous avoir de nombreux utilisateurs). Il y a aussi beaucoup de projets, qui peuvent contenir beaucoup de rôles utilisateur +, donc j'aimerais que le projet ait une relation plusieurs-à-plusieurs avec l'entrée dans la refclass pour la relation plusieurs-à-plusieurs entre les utilisateurs et les rôles.

Voici le YML pertinent:

Project: 
    columns: 
    title:    { type: string(255), notnull: true, unique: true } 
    relations: 
    CreditNameRoles: 
     class: CreditNameRole 
     refClass: ProjectCreditNameRole 
     foreignAlias: Projects 
     onDelete: CASCADE 

ProjectCreditNameRole: 
    columns: 
    project_id:   { type: integer, primary: true } 
    credit_name_role_id: { type: integer, primary: true } 
    relations: 
    Project:    { foreignAlias: ProjectGenres, onDelete: CASCADE } 
    CreditNameRole:  { foreignAlias: CreditNameRole, onDelete: CASCADE } 

CreditName: 
    columns: 
    name:  { type: string(255) } 
    relations: 
    Roles: 
     class: Role 
     refClass: CreditNameRole 
     foreignAlias: CreditNames 
     onDelete: CASCADE 

CreditNameRole: 
    columns: 
    id:    { type: integer} 
    credit_name_id: { type: integer, primary: true } 
    role_id:   { type: integer, primary: true } 
    relations: 
    CreditName:  { foreignAlias: CreditNameRoles, onDelete: CASCADE } 
    Role:   { foreignAlias: CreditNameRoles, onDelete: CASCADE } 

Role: 
    columns: 
    name:   { type: string(255) } 

En utilisant la doctrine/symfony pour essayer d'utiliser cette YML pour générer la base de données que je reçois les points suivants:

bash-3.2$ ./symfony doctrine:build --all --no-confirmation 

    SQLSTATE[HY000]: General error: 1005 Can't create table 'database_name.#sql-68_148' (errno: 150). Failing Query: "ALTER TABLE credit_name_role ADD CONSTRAINT crpc FOREIGN KEY (role_id) REFERENCES project_credit_name_role(credit_name_role_id)". Failing Query: ALTER TABLE credit_name_role ADD CONSTRAINT crpc FOREIGN KEY (role_id) REFERENCES project_credit_name_role(credit_name_role_id) 

Où est ce « FOREIGN KEY (role_id) 'venant et comment le corriger? Merci!

+0

Dans MySQL, vous ne pouvez pas avoir deux clés primaires , bien que vous puissiez avoir plusieurs index. Peut-être avoir deux colonnes d'id avec le primaire: vrai cause le problème? – LTME

Répondre

0

Peut-être dans ProjectCreditNameRole vos foreignAliases devraient tous deux être ProjectCreditNameRoles

1

Je pense que u besoin de supprimer les lignes et exécuter symfony doctrine: build --all

CreditNameRoles: 
id:    { type: integer} 
relations: 
    CreditName:  { foreignAlias: CreditNameRoles, onDelete: CASCADE } 
    Role:   { foreignAlias: CreditNameRoles, onDelete: CASCADE } 
Questions connexes