Symfony Doctrine Group By Query

时间:2016-05-30 10:26:57

标签: php postgresql symfony doctrine-orm doctrine

我的sql查询运行正常,

SELECT completed_by, count(*) AS Total
FROM tasks
WHERE completed_by is not null AND status = 1
GROUP BY completed_by
;

Em正在使用doctrine查询构建器,但无法返回错误。

$parameters = array(
                    'status' => 1,
                );

$qb = $repository->createQueryBuilder('log');
$query = $qb
->select(' log.completedBy, COUNT(log) AS Total')
->where('log.Status = :status')
->groupBy('log.completedBy')
->setParameters($parameters)
->getQuery();

并低于错误;

  

[语义错误]第0行,第21行附近'completedBy':错误:无效   PathExpression。必须是StateFieldPathExpression。

2 个答案:

答案 0 :(得分:0)

这是错误的:COUNT(log) AS Total。它应该是COUNT(log.log) AS Total

答案 1 :(得分:0)

我知道这个答案可能会迟到,但我遇到了同样的问题,并且没有在互联网上找到任何答案,我相信很多人都会在同样的问题上挣扎。

我假设你的“completedBy”是指另一个实体。

因此,在您的存储库中,您可以写:

$query = $this->createQueryBuilder("log")
              ->select("completer.id, count(completer)")
              ->join("log.completedBy", "completer")
              ->where('log.Status = :status')
              ->groupBy("completer")
              ->setParameters($parameters)
              ->getQuery();

这将编译为:

SELECT completer.id, count(completer) FROM "YOUR LOG CLASS" log INNER JOIN log.completedBy completer WHERE log.Status=:status GROUP BY completer

现在,您可以通过其ID执行另一个查询以获取这些“完成者”。