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);
....
Когда я установил $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