2013-04-15 3 views
10

Это кажется простым, но я не могу получить это право:Many-To-One с несколькими целевыми субъектами

Есть три сущности: Fruit, Vegetable и Snack. Закуска имеет поля id, time и food. Пища является ссылкой на либо один плод или один овощ. Так что это в основном отношения «много-к-одному»/«один ко многим», поскольку одна закуска всегда будет содержать только одну пищу. Но существует более одного целевого объекта.

Как мне отобразить это в Doctrine2?

Простое решение, которое я использовал бы, прежде чем зная, что Doctrine2 будет использовать два поля: food_type и food_id. Но как я могу установить соединение с пищевым типом в правильную сущность? Я думал о массиве JoinColumns, но не могу найти способ подключения правильной сущности. Я также посмотрел на сопоставленные суперклассы, потому что есть DiscriminatorColumn, но это также кажется неправильным подходом. Если я получу это правильно, суперкласс не может быть самой сущностью - поэтому я не могу создать пищевой объект.

Любая помощь приветствуется. Я уверен, что мне здесь что-то не хватает.

+1

Вы посмотрели [реализация доктрины наследования одной таблицы] (http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance)? –

ответ

7

Вы можете создать (абстрактный) сопоставленный суперкласс с именем Food, который может содержать основную информацию для Fruit и Vegetable.

Ключевое слово для вашего вопроса inheritance mapping, это документация для него: http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

Тогда вы могли бы ссылаться на это отображается суперкласс в ваших отношениях сущностей.

+1

Спасибо, это работает! Я запутался в заявлении в док-заявлении: «Связанный суперкласс не может быть сущностью». – sprain

+0

@sprain, не могли бы вы поделиться рабочим примером? – Jekis

+0

@ Дженечка: Пример в документации (см. Ссылку выше, глава 6.1) на самом деле является рабочим примером. – stedekay

Смежные вопросы