虽然我知道这是微不足道的,但我一直在尝试使用 DoctrineORMAdapter 实现 pagerfanta Paginator,但我想按 id 降序对所有实体进行分页,我想要的最终 SQL 是这样的:
SELECT id, name FROM User ORDER BY id DESC LIMIT 0, 5;
假设我有从 A 到 Z 的用户,并且我想将它们限制为每页 5 个,DoctrineORMAdapter 将用户 E 分页结果在第一页中列出的 A,而我真正期望的是看到用户 Z 到用户 V第一页,第二页中的 U 到 Q,依此类推。我传递给 DoctrineORMAdapter 的 DQL 如下:
SELECT u FROM My\FluffyBundle\Entity\User u ORDER BY u.id DESC
在执行时,这是第一页的最终 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
请注意,当使用 ArrayAdapter 而不是 DoctrineORM 时,它可以按预期工作,但是当您有数千个复杂的 Doctrine 实体时,依赖 ArrayAdapter 并不是一个好主意,即使是额外的延迟加载:D。
这是唯一相关的代码:
$queryBuilder = $repo->createQueryBuilder('u')->orderBy('u.id', 'DESC');
$adapter = new DoctrineORMAdapter($queryBuilder);
$pager = new Pagerfanta($adapter);
$pager->setMaxPerPage(5);
谢谢。