2010-12-27 8 views
0

私は次のデータベースのセットアップがあります。Doctrine2 - 一つのフィールドに複数の関係

Tag (Integer id) 
ItemTag (Integer id, Integer tag_id, Integer item_id, Integer item_type) 
Artwork (Integer id) 
Photo (Integer id) 

を私は

class ItemTag { 
/** 
* @Id @GeneratedValue 
* @Column(type="integer") 
*/ 
private $id; 

/** 
* @Column(type="integer") 
*/ 
private $item_type; 

/** 
* @ManyToOne(targetEntity="Artwork") 
* @JoinColumn(name="item_id", referencedColumnName="id") 
*/ 
private $artwork; 

/** 
* @ManyToOne(targetEntity="Photo") 
* @JoinColumn(name="item_id", referencedColumnName="id") 
*/ 
private $photo; 

/** 
* @ManyToOne(targetEntity="Tag") 
*/ 
private $tag; 
} 

以下のような作品のIDと写真付きの身分証明書の両方のためにItemTag中のitem_idフィールドを使用してみました上記の設定ではエラーは発生せず、「写真アイテム」を保存しようとすると問題なく動作しますが、「アートワークアイテム」を保存するとitem_idはNULLになります。

両方のリレーションを1つのitem_idフィールドに保存できる方法はありますか?

答えて

1

はい、継承を使用できます。

抽象クラス "アイテム"を定義し、写真とアートワークの両方でそれを拡張できます。

http://www.doctrine-project.org/docs/orm/2.0/en/reference/inheritance-mapping.html

これは少ししかし、あなたのスキーマを変更する必要があります。

+0

ありがとう、これは私が探していたものとまったく同じです。しかし、DBの変更が必要かどうかはわかりません。私はこの例に従ってみましたが、ItemTag $ itemプロパティで次のように設定すると、Item(スーパークラス)に列 "id"が足りなくなっているというメッセージが表示されます... @ManyToOne(targetEntity = "Item") @JoinColumn = "item_id"、referencedColumnName = "id") – YiSh

関連する問題