2011-01-31 3 views
4

У меня есть таблица с именем forums со структурой последующего поля:доктрина полиморфной ассоциации

  1. object_type -> [Группа | Страница | Турнир | и т. д.). (Возможные значения: каждый элемент имеет свою собственную таблицу)

  2. object_id -> [id группы | Идентификатор страницы | идентификатор турнира | и т.д ..] (идентификатор object_type)

  3. id_forum, 4.name и т.д.

Тогда я следующие таблицы: Group, Page, Tournament и т.д ..

ли возможно ли это реализовать с учением?

ответ

0

У меня была аналогичная проблема. Я опубликовал полный пример того, как реализовать полиморфные ассоциации в Доктрине 2.2 в this post.

7

Это должен был быть комментарий, но моя репутация слишком низкая, извините.

К сожалению, полиморфная ассоциация не совсем такая же, как CTI (Наследование классов таблицы): CTI требует родительскую таблицу с одинаковым идентификатором для всех подклассов.

CTI может работать в большинстве случаев, но это может быть проблемой, если вы хотите создать полиморфную связь между существующими объектами, которые уже имеют свой собственный идентификатор и/или, возможно, могут иметь другой тип идентификатора.

Кроме того, CTI требует создания записи в родительской таблице для каждого подкласса, который бесполезен для полиморфной ассоциации. Полиморфная ассоциация не должна требовать какой-либо таблицы, она должна просто присоединяться к существующим таблицам с условиями (id, type). Я полагаю, для Doctrine требуется родительская таблица для простоты/производительности.

Когда CTI не является решением, я предлагаю эмулировать полиморфную ассоциацию на уровне репозитория, то есть создать абстрактный репозиторий с атрибутом $ type и реализовать метод polyorphicJoin, который автоматически присоединяет текущий запрос к целевой таблице, условия id/type. Затем расширяет абстрактный репозиторий с помощью ваших подклассов Repositories и вызывает метод polymorphicJoin, когда это необходимо в методах поиска/выбора.

Было бы здорово, если бы такая ассоциация была реализована в Доктрине.

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