Много-To-One с несколькими целевыми объектами
Это кажется простым, но я не могу понять:
Существует три объекта: Fruit
, Vegetable
и Snack
. Закуска имеет поля id
, time
и food
. Пища - это ссылка на один из фруктов или один овощ. Так что это в основном отношения "много-к-одному" / "один ко многим", поскольку одна закуска всегда будет содержать только одну пищу. Но существует более одного целевого объекта.
Как мне отобразить это в Doctrine2?
Простое решение, которое я использовал бы прежде, чем Doctrine2 будет использовать два поля: food_type
и food_id
. Но как я могу установить соединение с пищевым типом в правильную сущность? Я думал о массиве JoinColumns, но не могу найти способ подключения правильной сущности. Я также посмотрел на сопоставленные суперклассы, потому что есть DiscriminatorColumn, но это также кажется неправильным подходом. Если я получу это правильно, суперкласс не может быть самой сущностью - поэтому я не могу создать пищевой объект.
Любая помощь приветствуется. Я уверен, что мне не хватает чего-то простого здесь.
Ответы
Ответ 1
Вы можете создать (абстрактный) отображаемый суперкласс с именем Food
, который может содержать некоторую базовую информацию для Fruit
и Vegetable
.
Ключевое слово для вашего вопроса: inheritance mapping
, это документация для него: http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html
Затем вы можете ссылаться на этот сопоставленный суперкласс в своей связи с сущностью.