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

Get other aggregate values than count with Doctrine Paginator

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

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

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

有没有办法扩展分页器来做到这一点?

我想我现在可以回答我自己的问题了,所以我要试一试。 为了构建 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 class,它将采用 QueryBuilder 而不是 Query,并且将有一个方法来获取聚合值关闭此 QueryBuilder.