Symfony Doctrine 按查询分组

Muh*_*aqi 6 php postgresql doctrine symfony doctrine-orm

我有下面的 sql 查询运行良好,

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

他们正在使用学说查询构建器来执行此操作,但无法返回错误。

$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();
Run Code Online (Sandbox Code Playgroud)

并低于错误;

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

小智 6

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

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

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

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

这将编译为如下内容:

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

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


mic*_*JlS 0

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