虽然我知道这是微不足道的,但是我试图使用DoctrineORMAdapter来实现pagerfanta Paginator,我想按降序对所有按id排序的实体进行分页,我想要的最终SQL是这样的:
SELECT id, name FROM User ORDER BY id DESC LIMIT 0, 5;
Run Code Online (Sandbox Code Playgroud)
假设我有从A到Z的用户,并且我想将它们限制为每页5个,DoctrineORMAdapter分页的结果是在第一页中列出的用户E到A,而我实际上期望在用户V中看到用户Z第一页,U到Q在第二页,依此类推.我传递给DoctrineORMAdapter的DQL如下:
SELECT u FROM My\FluffyBundle\Entity\User u ORDER BY u.id DESC
Run Code Online (Sandbox Code Playgroud)
在执行时,这是第一页的最终DQL:
SELECT DISTINCT id0 FROM (SELECT u0_.id AS id0, u0_.name AS name1 FROM User u0_
ORDER BY u0_.id DESC) dctrn_result LIMIT 5 OFFSET 0
Run Code Online (Sandbox Code Playgroud)
请注意,当使用ArrayAdapter而不是DoctrineORM时,它可以按预期工作,但是当你有数千个复杂的Doctrine实体时,依赖ArrayAdapter并不是一个好主意,即使有额外的延迟加载也是如此:D.
这是唯一相关的代码:
$queryBuilder = $repo->createQueryBuilder('u')->orderBy('u.id', 'DESC');
$adapter = new DoctrineORMAdapter($queryBuilder);
$pager = new Pagerfanta($adapter);
$pager->setMaxPerPage(5);
Run Code Online (Sandbox Code Playgroud)
谢谢.
这将有助于您:
$adapter = new DoctrineORMAdapter($queryBuilder, false);
Run Code Online (Sandbox Code Playgroud)
今天早上有同样的问题.默认情况下,Pagerfanta将您的查询视为具有连接的查询.将第二个参数设置为false使其使用简单的查询处理.
在Kunstmaan Bundle中,在AdminListConfiguration类中,如果要对简单实体进行排序,则必须覆盖正在创建Pagerfanta的函数.
归档时间: |
|
查看次数: |
2042 次 |
最近记录: |