Php 带“$fetchJoinCollection=true”的分页器不尊重原则DQL中的“ORDER BY”?

Php 带“$fetchJoinCollection=true”的分页器不尊重原则DQL中的“ORDER BY”?,php,orm,doctrine-orm,Php,Orm,Doctrine Orm,有一个奇怪的问题。我们正在使用MariaDB 5.5和条令/orm 2.3.3,并尝试将条令分页器与DQL一起使用。 DQL有一个ORDERBY子句[参见下面的示例]。但是,对于给定的页面大小,结果根本不会排序。而且,如果我们增加页面大小以覆盖整个结果集,排序就会正确 $dql = "SELECT a, b FROM EntityA a JOIN a.propertyB b ORDER BY a.createdOn DESC"; $query = $this->em->

有一个奇怪的问题。我们正在使用MariaDB 5.5和条令/orm 2.3.3,并尝试将条令分页器与DQL一起使用。

DQL有一个ORDERBY子句[参见下面的示例]。但是,对于给定的页面大小,结果根本不会排序。而且,如果我们增加页面大小以覆盖整个结果集,排序就会正确

   $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,排序都是正确的

阅读条令源代码[条令/ORM/Tools/Pagination/Paginator.php]。如果$fetchJoinCollection=true,则条令使用WhereInWalker来获得最终结果,这不尊重DQL中的ORDER By子句,因为in子句不会以与in子句中ID相同的顺序生成结果

IN子句的排序解决方案可在中找到。但我找不到这样的教条


任何一个有内在知识的人都会有所启发?!谢谢

发现人们已经注意到了这个问题


你的问题正确吗$dql=从实体a中选择a,b加入a.propertyB b按a.createdOn描述顺序;似乎您选择的不是列而是表?这是DQL,不是SQL。在这个例子中,我选择了两个实体。但这不是问题,你的链接断了。