Лучшие практики на Доктрине и Symfony - PullRequest
0 голосов
/ 19 января 2012

Я хотел бы знать, что предпочтительнее для оптимизации между двумя подходами в ORM.

  • Я создаю QueryBuilder с условиями моего объекта и получаю массив объектов, соответствующих моим условиямзапрашивает
  • и получает все объекты с getDoctrine()->findAll(), а затем проверяет в php условия, которые я применил к моим объектам

Мне интересно, особенно в случае бронирования отелей и доступностинекоторых комнат.Этот вид поиска включает в себя множество различных объектов со сложными запросами.От одной мысли о построителе запросов у меня болит голова ... Но я не уверен, что это лучший способ заполнить все энтиты в php и затем применить мои функции ....

Ответы [ 2 ]

1 голос
/ 23 января 2012

Как правило, вы должны получать нужные вам объекты через запросы, построенные с помощью построителя запросов.Вы не должны получать все свои сущности через ->findAll(), а затем фильтровать с помощью php, поскольку это может быть очень ресурсоемким - представьте, что у вас есть 1 000 000 записей в вашей базе данных?

Если вы просматривали бронирование отелей и доступность номеров - вы бы написали запрос, который возвращает только объекты, у которых есть свободные номера, - вместо проверки всех объектов с помощью php.

Я написал сообщение в блоге.о некоторых лучших практиках с доктриной, которые можно найти здесь - http://www.uvd.co.uk/blog/some-doctrine-2-best-practices/

0 голосов
/ 23 января 2012

Я думаю, что всегда лучше создать QueryBuilder (или просто написать запрос DQL), чтобы получить свои результаты.

Когда вы получаете все свои объекты с помощью вызова getDoctrine()->findAll(), создается объект PHP, и его значения устанавливаются для каждого результата. Тогда ваш PHP-скрипт (который, конечно, медленнее, чем база данных) будет хранить только интересные объекты, у вас будет много garbadge .

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

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