Doctrine2: Ограничение с помощью левых объединений / Разбиение на страницы — передовой опыт

У меня есть большой запрос (в моем конструкторе запросов) и много левых объединений. Так что я получаю статьи с их комментариями и тегами и так далее. Допустим, у меня есть следующий dql:

$dql = 'SELECT blogpost, comment, tags 
FROM BlogPost blogpost 
LEFT JOIN blogpost.comments comments
LEFT JOIN blogpost.tags tags';

Теперь предположим, что в моей базе данных более 100 сообщений в блогах, но мне нужны только первые 10, но со всеми комментариями этих 10 и всеми их тегами, если они существуют. Если я использую setMaxResults, он ограничивает количество строк. Таким образом, я могу получить первые два сообщения, но в последнем из них отсутствуют некоторые комментарии или теги. Таким образом, следующее не работает.

$result = $em->createQuery($dql)->setMaxResults(15)->getResult();

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

Я попробовал решения в статье Stackoverflow, но даже в этой статье по-прежнему отсутствует передовой опыт, а представленное решение ужасно медленное.

Есть ли лучший способ сделать это? Никто не использует Doctrine2.2 в режиме производства?

7
задан Community 23 May 2017 в 11:33
поделиться