php – Paginator与“$fetchJoinCollection = true”不符合“ORD
有一个奇怪的问题.我们使用的是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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |