加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Paginator与“$fetchJoinCollection = true”不符合“ORD

发布时间:2020-12-13 16:25:35 所属栏目:PHP教程 来源:网络整理
导读:有一个奇怪的问题.我们使用的是MariaDB 5.5和doctrine / orm 2.3.3,并尝试使用DQL的Doctrine Paginator. http://docs.doctrine-project.org/en/latest/tutorials/pagination.html DQL具有ORDER BY子句[见下面的说明示例].但是,对于给定的页面大小,结果根本没
有一个奇怪的问题.我们使用的是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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读