0

次のデータベース設定があります。

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

以下のように、アートワークIDと写真IDの両方にItemTagのitem_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;
}

上記のセットアップではエラーは発生せず、「写真アイテム」を保存しようとすると正常に動作しますが、「アートワーク アイテム」を保存すると item_id が NULL になります。

両方の関係を単一の item_id フィールドに保存できる方法はありますか?

4

1 に答える 1

1

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

抽象クラス「Item」を定義して、Photo と Artwork の両方でそれを拡張できます。

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

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

于 2010-12-28T10:32:13.593 に答える