Подтвердить что ты не робот

Paginator с "$ fetchJoinCollection = true" не будет уважать "ORDER BY" в доктрине DQL?

Возникает странная проблема. Мы используем MariaDB 5.5 и doctrine/orm 2.3.3 и пытаемся использовать Paginator Doctrine с DQL. http://docs.doctrine-project.org/en/latest/tutorials/pagination.html

В DQL есть предложение ORDER BY [см. ниже пример иллюстрации]. Однако результат не сортируется вообще для заданного размера страницы. И, если мы увеличим размер страницы для охвата всего набора результатов, сортировка станет правильной.

   $dql = "SELECT a, b FROM EntityA a JOIN a.propertyB b ORDER BY a.createdOn DESC";
   $query = $this->em->createQuery($dql)
       ->setMaxResults($pageSize)
       ->setFirstResult($offset);
   $paginator = new Paginator($query, $fetchJoinCollection=true);
   ....

Я сбросил sql и вручную запускал его. Sql также дал правильную сортировку. Таким образом, что-то вызывает проблему сортировки в классе Doctrine Paginator.

Когда я устанавливаю $fetchJoinCollection = false и передал его в конструктор Paginator, сортировка стала правильной для любого заданного $pageSize!

Прочитайте исходный код Doctrine [Doctrine/ORM/Tools/Pagination/Paginator.php]. С $fetchJoinCollection = true доктрина использует WhereInWalker для получения конечного результата, который не учитывает предложение ORDER BY в DQL, поскольку предложение IN() не генерирует результат в том же порядке, что и идентификаторы внутри IN().

Решение сортировки для предложения IN() можно найти в Заказ по порядку значений в предложении SQL IN(). Но я не могу найти Doctrine, используя это.

Кто-нибудь с внутренним знанием Доктрины прольет какой-то свет?! Спасибо!

4b9b3361