nepster-web
@nepster-web

Doctrine, есть ли решение для оптимальной выборки и поиску по ассоциациям?

Работая с Doctrine я столкнулся с проблемами при выборке, когда запрос немного усложняется.

Давайте представим классическую ситуацию:
есть статья, у статьи есть теги (мэни ту мэни), есть изображения, какие-то лейблы и тп.

Предположим нам нужна небольшая оптимизация, когда нужно отдать все сразу (100 статей и к ним все изображения и все теги). Если мы будем использовать ленивую загрузку, то получится что, первым запросом мы получим все статьи, а потом к каждой будем делать запрос на изображения и теги, в результате 202 запроса.

Это не хорошо, поэтому делаем джоин там, где это нужно. На примере работы AR, скажем в Yii2, он оптимизирует это дело следующим образом: берет все статьи, все изображения для этих статей, все категории для этих статей и сопоставляет. Следовательно можно уложиться в 3 запроса к примеру.

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

В моем случае со всеми джоинами и фильтрами доктрина отдавала не все записи по фильтру, а скажем только те, где есть изображения. Например: я хочу все записи с тегом Вася, не важно есть там изображения или нет. У доктрины в некоторых ситуациях на этот счет свое мнение и я получаю все записи с тегом Вася и только те, где есть изображения. Конечно, если убрать джоин на изображения все будет норм.

Исходя из этого пришлось в ручную реализовывать то, что делает AR. Отдельно взять изображения, категории, и рефлексией подставить. Код получился громоздким и хотелось бы узнать есть ли решения упрощающие жизнь ?
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы