查询构建器

时间:2016-06-22 06:48:56

标签: php postgresql symfony doctrine dql

我更喜欢在我的项目中强制使用查询构建器,我发现它生成的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工具,对于更多基于数组的非水合查询结果集没有用。

1 个答案:

答案 0 :(得分:0)

是的,对于任何ORM,聚合都是一个棘手的问题。如果您愿意,可以使用Low level API将DQL部件包装到查询构建器中:

$queryBuilder->add('select', 'SUM(p.amount) as points');