Пагинатор с «$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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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