Doctrine2 - множественные отношения на одном поле - PullRequest
0 голосов
/ 27 декабря 2010

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

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 Ответ

1 голос
/ 28 декабря 2010

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

Вы можете определить абстрактный класс "Предмет" и сделать так, чтобы и Фотография, и Художественное произведение расширяли его.

http://www.doctrine -project.org / документы / ОРМ / 2.0 / ен / ссылка / наследование-mapping.html

Это требует, чтобы вы слегка изменили свою схему.

...