Доктрина, как установить отношения "многие ко многим ко многим"

Резюме. Используя следующий YML, я получаю ссылку на ИНОСТРАННЫЙ КЛЮЧ (role_id), которого нет в моем YML.

Проблема: я пытаюсь создать систему, в которой есть пользователь (CreditName), который может принадлежать ко многим ролям (каждая из которых может иметь много пользователей). Есть также много проектов, которые могут содержать множество ролей «Пользователь +», поэтому я бы хотел, чтобы проект имел отношение «многие ко многим» с записью в refclass для отношения «многие ко многим» между пользователями и ролями.

Вот соответствующий YML:

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) }

Используя doctrine / symfony, чтобы попытаться использовать этот YML для создания базы данных, я получаю следующее:

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)  

Откуда берется этот «ИНОСТРАННЫЙ КЛЮЧ (role_id)» и как его исправить? Спасибо!


person m14t    schedule 20.05.2010    source источник
comment
В mysql у вас не может быть двух первичных ключей, хотя у вас может быть несколько индексов. Может быть, наличие двух столбцов id с primary: true вызывает проблему?   -  person LTME    schedule 21.05.2010


Ответы (2)


Я думаю, вам нужно удалить эту строку и запустить symfony doctrine: build --all

CreditNameRoles:
 id:              { type: integer}
relations:
    CreditName:      { foreignAlias: CreditNameRoles, onDelete: CASCADE }
    Role:            { foreignAlias: CreditNameRoles, onDelete: CASCADE }
person epoi    schedule 02.06.2011

Возможно, в ProjectCreditNameRole ваши foreignAliases должны быть ProjectCreditNameRoles

person LTME    schedule 25.05.2010