php – Paginator与“$fetchJoinCollection = true”不符合“ORDER BY”在原则DQL中?

前端之家收集整理的这篇文章主要介绍了php – Paginator与“$fetchJoinCollection = true”不符合“ORDER BY”在原则DQL中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个奇怪的问题.我们使用的是MariaDB 5.5和doctrine / orm 2.3.3,并尝试使用DQL的Doctrine Paginator.
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,doctrine使用WhereInWalker获取最终结果,这不符合DQL中的ORDER By子句,因为IN()子句不会按照与IN()子句.

IN()子句的排序解决方案可以在Ordering by the order of values in a SQL IN() clause找到.但是我找不到使用这个的Doctrine.

任何有教义内在知识的人都会有点光明吗?谢谢!

发现人们已经照顾这个问题了.

http://www.doctrine-project.org/jira/browse/DDC-2593

猜你在找的PHP相关文章