Много-To-One с несколькими целевыми объектами

Это кажется простым, но я не могу понять:

Есть три объекта: 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

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