Доктрина ORM: Как определить 1-n связь с n-n соединительной таблицей - PullRequest
0 голосов
/ 18 июля 2011

Итак, это немного сложно: у меня есть две таблицы, скажем cats и dogs.Они находятся в отношении многих ко многим (их можно назвать friendships или как угодно), поэтому Doctrine автоматически создает для меня таблицу cats_dogs с соответствующими полями.(это rowid, cat_id, dog_id по умолчанию.)

Теперь представьте, что у меня есть третья таблица, award, где я хочу наградить одну из этих дружеских связей.Поэтому мне нужно поле, которое ссылается на одну строку в cats_dogs.Однако, поскольку эта таблица на самом деле не существует между моими моделями, (Doctrine обрабатывает ее для меня), что было бы самым элегантным решением для этого?, cat и dog, которые должны быть в дружбе.

Я использую драйвер аннотации.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2013

Целью Doctrine является сопоставление объектов из схемы E / R и упрощение доступа к объектным соединениям.Поэтому я считаю, что таблица cats_dogs, автоматически предоставленная Doctrine, необходима как она есть.Оно лаконично и соответствует своим целям, т. Е. Содержит список всех собак кошки или, наоборот, всех кошек собаки.

Таким образом, я могу заключить, что предпочтительно создать третьюсущность (кроме Cat и Dog) с именем Award, которая обеспечивает отношение один-к-одному с Cat и еще одно отношение-к-одному с Dog.Приведение его в соответствие с таблицей cats_dogs зависит только от вас и не является задачей Doctrine по умолчанию.Например, вы можете использовать несколько вариантов каскадного сохранения.Я считаю, что это самое эффективное решение с доктриной.

В качестве заключительного замечания следует учитывать, что каждая таблица должна отображать определенные отношения между одним или несколькими объектами, и фактически таблица cats_dogs представляет отношения дружба , а таблица Award будет представлять награжденные отношения отношения между двумя друзьями.

0 голосов
/ 30 июля 2011

Что мешает вам вручную создать таблицу m: n вместо того, чтобы доктрина делала это для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...