Пагинатор с «$fetchJoinCollection = true» не будет соблюдать «ORDER BY» в доктрине DQL?Php

Кемеровские программисты php общаются здесь
Anonymous
Пагинатор с «$fetchJoinCollection = true» не будет соблюдать «ORDER BY» в доктрине DQL?

Сообщение Anonymous »

Странная проблема. Мы используем MariaDB 5.5 и Doctrine/orm 2.3.3 и пытаемся использовать Doctrine Paginator с DQL.
http://docs.doctrine-project.org/en/lat ... ation.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 также дал правильную сортировку. Итак, что-то вызывает проблему сортировки внутри класса Paginator Doctrine.

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

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

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

Кто-нибудь, обладающий внутренними знаниями Doctrine, мог бы пролить свет?! Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/164 ... in-doctrin

Вернуться в «Php»