2010-12-27 2 views
0

У меня есть следующие настройки баз данных:Doctrine2 - множественные отношения на одном поле

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

Я попытался с помощью ITEM_ID поля в ItemTag и для произведения Ид и удостоверения личности с фотографией, как показано ниже

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?

ответ

1

Да, вы можете использовать наследование.

Вы можете определить абстрактный класс «Предмет» и иметь как фотографию, так и произведение.

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

Для этого необходимо изменить схему немного, хотя.

+0

Спасибо, мне кажется, именно то, что я искал. Однако не уверены, какие изменения необходимы. Я попытался следовать примеру, но установка следующего свойства ItemTag $ item вызывает жалобу на столбец «id», отсутствующий на Item (суперкласс), несмотря на то, что он там ... @ManyToOne (targetEntity = "Item") @JoinColumn (name = "item_id", referedColumnName = "id") – YiSh

Смежные вопросы