0

概要: 次の 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) }

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)  

この 'FOREIGN KEY (role_id)' はどこから来たのですか?どうすれば修正できますか? ありがとう!

4

2 に答える 2

1

これらの行を削除して、symfony doctrine:build --all を実行する必要があると思います

CreditNameRoles:
 id:              { type: integer}
relations:
    CreditName:      { foreignAlias: CreditNameRoles, onDelete: CASCADE }
    Role:            { foreignAlias: CreditNameRoles, onDelete: CASCADE }
于 2011-06-02T02:18:35.720 に答える
0

おそらく ProjectCreditNameRole では、foreignAliases は両方とも ProjectCreditNameRoles である必要があります

于 2010-05-25T16:43:47.193 に答える