当前位置:  开发笔记 > 编程语言 > 正文

带有"$ fetchJoinCollection = true"的Paginator在学说DQL中不会尊重"ORDER BY"吗?

如何解决《带有"$fetchJoinCollection=true"的Paginator在学说DQL中不会尊重"ORDERBY"吗?》经验,为你挑选了0个好方法。

有一个奇怪的问题.我们正在使用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()子句不会以与内部ID相同的顺序生成结果. IN()子句.

可以在按SQL IN()子句中的值顺序排序中找到IN()子句的排序解决方案.但我找不到使用它的Doctrine.

任何具有学说内在知识的人都会有所帮助吗?!谢谢!

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有