使用Doctrine Paginator获取除计数之外的其他聚合值

时间:2018-04-27 14:26:14

标签: php doctrine-orm aggregate paginator

假设我有一个Invoice实体,其中两个字段映射到学说:code(发票编号,如'INV20180427')和total(发票总额,比如19.99)。

我有很多发票,所以我使用Doctrine的Paginator来显示它们。我创建了一个查询构建器和一个Paginator然后:

  • 我使用count($paginator)获取结果总数
  • 我遍历paginator以获取当前页面的结果。

我的问题是,我还希望与我的查询相对应的所有发票总数(例如SELECT SUM(o.total) FROM Invoice o WHERE ...),而不仅仅是发票数量。

有没有办法扩展Paginator来做到这一点?

1 个答案:

答案 0 :(得分:0)

我想我现在可以回答自己的问题,所以我将尝试一下。 为了构建Paginator,我使用了QueryBuilder,所以我应该使用此查询生成器来获取汇总值:

$queryBuilder = $em->createQueryBuilder()
    ->from(Invoice::class, 'i')
    ->select('o');

$paginator = new Paginator($queryBuilder->getQuery());

$total = $queryBuilder->select('SUM(i.total)')->getQuery()->getSingleScalarResult();

问题仍然存在,如果我只能访问Paginator,我将无法获得所需的汇总值,因为Paginator不知道QueryBuilder,而只知道{ Query

因此,可以创建一个CustomPaginator类,该类将使用QueryBuilder而不是Query,并且将有一种方法可以从该{{1} }。

相关问题