假设我有一个Invoice
实体,其中两个字段映射到学说:code
(发票编号,如'INV20180427'
)和total
(发票总额,比如19.99
)。
我有很多发票,所以我使用Doctrine的Paginator来显示它们。我创建了一个查询构建器和一个Paginator然后:
count($paginator)
获取结果总数paginator
以获取当前页面的结果。我的问题是,我还希望与我的查询相对应的所有发票总数(例如SELECT SUM(o.total) FROM Invoice o WHERE ...
),而不仅仅是发票数量。
有没有办法扩展Paginator来做到这一点?
答案 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} }。