Хранилище Доктрин против Частных Членов - PullRequest
2 голосов
/ 18 марта 2011

В настоящее время я пытаюсь модернизировать базу данных с помощью Doctrine, но в текущей реализации не так много двунаправленных связей между таблицей.Это затрудняет прохождение графа объекта от любой заданной сущности.

Допустим, я хочу иметь возможность начинать с любой заданной точки и проходить весь граф объекта.Прочитав документацию, я могу:

1) Перестроить базу данных с полями двунаправленных отношений, чтобы я мог перемещаться с помощью правильно настроенного сопоставления сопоставлений

2) Создать собственные репозитории и получитьпередавая различные сущности

Я боюсь создавать двунаправленные отношения везде, но в то же время создание множества пользовательских хранилищ вызывает у меня плохое предчувствие.Каково эмпирическое правило при принятии решения об использовании ассоциативного сопоставления с репозиториями?Есть ли какие-либо преимущества в производительности от одного или другого?

1 Ответ

0 голосов
/ 02 ноября 2011

Вы все еще можете проходить однонаправленные ассоциации между сущностями, создавая свои запросы, используя выборочные объединения. Таким образом, связанные объекты включаются в гидратированный набор результатов, возвращаемый запросом.

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

Также обратите внимание, что даже если вы действительно преобразовали ассоциации в двунаправленные, вы фактически не «перестраиваете базу данных». Вы бы только добавляли новые свойства к обратным сторонам ваших отношений. Это не добавит никаких новых полей в саму базу данных.

Что касается добавления / использования пользовательских репозиториев, это само по себе не повлечет за собой никаких накладных расходов. Пользовательские репозитории - это просто места для хранения запросов и другой логики домена, специфичной для данного объекта. Фактически, кодирование пользовательских запросов в ваших классах репозитория может быть более эффективным, чем попытка сделать запрос, используя только методы репозитория по умолчанию, такие как find () и findAll (), которые автоматически загружают связанные объекты, нужны они вам или нет.

...