【发布时间】:2020-05-30 17:02:12
【问题描述】:
我有一个实体 Client,与实体 Contract 有关系。合同有一个字段amount 和一个字段payingDelay。
Client.php
/**
* @ORM\OneToMany(targetEntity="Contract", mappedBy="client")
* @ORM\JoinColumn(name="contract_id", referencedColumnName="id")
*/
private $contract;
我想显示所有客户的列表,其中包含一些基本客户字段以及合同的一些计算(SUM 等)信息,如下所示:
name - num contracts - sum(amounts) - aggregated risk
John - COUNT(contracts) - SUM(C.amount) - SUM(C.amount * C.payingDelay)
This is my basic `findClientWithCalculations()` method in `ClientRepository`:
return $this->createQueryBuilder('CLI')
->join('CLI.contract', 'CON')
->orderBy('CON.startDate', 'DESC')
->getQuery()
->getResult();
Is there a way I can add extra columns to this QueryBuilder, even if the final structure doesn't match the structure of a Client object or this must be done outside from a repository?
If not, maybe I can build a custom query in a controller and pass the query result to a twig template to show this structure.
Thank you.
【问题讨论】:
-
有很多方法可以使用学说来选择你需要的东西。检查查询生成器的文档。您可以使用查询构建器的 select() 函数在字符串中仅选择您需要的字段,包括“COUNT(contracts) AS numContracts”。您还可以添加数组并分别选择实体。基本上,任何对你有用的东西。您很可能需要 groupBy('client.id')。
标签: doctrine repository entity