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