我更喜欢在我的项目中强制使用查询构建器,我发现它生成的sql比直接编写DQL更加可预测(它在过去对我做了一些非常奇怪的连接)。但是,我发现这个DQL是我可以进行此聚合查询的唯一方法。
$q = $this->getEntityManager()->createQuery(<<<DQL
SELECT IDENTITY(p.business, 'id') as businessId, SUM(p.amount) as points
FROM APIBundle\Entity\Point p
WHERE IDENTITY(p.user, 'id') = :user
GROUP BY p.business
DQL
)
->setParameter('user', $user->getId())
;
return $q;
这是我唯一的选择还是可以将查询编译器用于相同的结果?
我得到一些理解,查询构建器更像是一个具有水合作用的orm工具,对于更多基于数组的非水合查询结果集没有用。
答案 0 :(得分:0)
是的,对于任何ORM,聚合都是一个棘手的问题。如果您愿意,可以使用Low level API将DQL部件包装到查询构建器中:
$queryBuilder->add('select', 'SUM(p.amount) as points');