【问题标题】:Doctrine how to setup Many to Many to Many relationship教义如何建立多对多关系
【发布时间】:2010-05-20 15:40:15
【问题描述】:

总结: 使用以下 YML,我获得了对不在我的 YML 中的 FOREIGN KEY (role_id) 的引用。

问题: 我正在尝试创建一个系统,其中有一个用户(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) }

使用教义/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)  

这个“FOREIGN KEY (role_id)”是从哪里来的,我该如何更正它?谢谢!

【问题讨论】:

  • 在mysql中你不能有两个主键,虽然你可以有多个索引。也许有两个带有 primary:true 的 id 列会导致问题?

标签: symfony1 doctrine many-to-many relationship


【解决方案1】:

我认为你需要删除这些行并运行 symfony 学说:build --all

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

【讨论】:

    【解决方案2】:

    也许在 ProjectCreditNameRole 中你的 foreignAliases 都应该是 ProjectCreditNameRoles

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多