[Symfony1.4] 同じテーブルのカラムへの複数リレーションを持たせる方法

Tadashi Shigeoka ·  Tue, November 15, 2011

Symfony1.4にて、schema.yml を作成しているときに、同じテーブルのカラムへの複数リレーションを持たせるのに苦労したのでメモ。

本の情報を登録したユーザと変更したユーザの情報を持つために、registry_user_id と edit_user_id というレコードを Book テーブルに持たせています。

それぞれ、User テーブルのid とリレーションを持たせたいのですが、下記のように書くと、後ろの edit_user_id しかリレーションを持てません。

Book:
  actAs:
    Timestampable: ~
    Sluggable: ~
  columns:
    .
    .
    registry_user_id:
      type:             integer
      notnull:          true
    edit_user_id:
      type:             integer
    .
    .
  relations:
    User:
      onDelete:         CASCADE
      local:            registry_user_id
      type:             one
      alias:            RegistryUser
      foreign:          id
      foreignType:      one
    User:
      onDelete:         CASCADE
      local:            edit_user_id
      type:             one
      alias:            EditUser
      foreign:          id
      foreignType:      one

これを下記のように、クラス名を直接指定するのではなく、それぞれに名前を持たせて class: User と指定すればOKです。

    RegistryUser:
      onDelete:         CASCADE
      class:            User
      local:            registry_user_id
      type:             one
      foreign:          id
      foreignType:      one
    EditUser:
      onDelete:         CASCADE
      class:            User
      local:            edit_user_id
      type:             one
      foreign:          id
      foreignType:      one

以上です。