Много-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

Затем вы можете ссылаться на этот сопоставленный суперкласс в своей связи с сущностью.