【问题标题】:pagerfanta - DoctrineORMAdapter Sortingpagerfanta - DoctrineORMAdapter 排序
【发布时间】:2014-01-19 09:32:36
【问题描述】:

虽然我知道这是微不足道的,但我一直在尝试使用 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);

谢谢。

【问题讨论】:

    标签: symfony doctrine pagerfanta


    【解决方案1】:

    这将对您有所帮助:

    $adapter = new DoctrineORMAdapter($queryBuilder, false);
    

    今天早上遇到了同样的问题。 默认情况下,Pagerfanta 将您的查询视为具有连接的查询。将第二个参数设置为 false 使其使用简单的查询处理。

    在 Kunstmaan Bundle 的 AdminListConfiguration 类中,如果要对简单实体进行排序,则必须覆盖创建 Pagerfanta 的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多