使用 Doctrine Paginator 获取除 count 之外的其他聚合值
Get other aggregate values than count with Doctrine Paginator
假设我有一个 Invoice
实体,其中两个字段映射到学说:code
(发票编号,如 'INV20180427'
)和 total
(发票总计,例如 19.99
).
我有很多发票,所以我使用 Doctrine 的分页器来显示它们。我创建了一个查询生成器和一个分页器,然后:
- 我用
count($paginator)
得到结果总数,
- 我遍历
paginator
以获得当前页面的结果。
我的问题是我还希望 所有发票的总数 对应于我的查询(如 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
.
假设我有一个 Invoice
实体,其中两个字段映射到学说:code
(发票编号,如 'INV20180427'
)和 total
(发票总计,例如 19.99
).
我有很多发票,所以我使用 Doctrine 的分页器来显示它们。我创建了一个查询生成器和一个分页器,然后:
- 我用
count($paginator)
得到结果总数, - 我遍历
paginator
以获得当前页面的结果。
我的问题是我还希望 所有发票的总数 对应于我的查询(如 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
.