用COUNT,SUM和CONCAT

时间:2018-06-28 13:44:27

标签: doctrine-orm count sum concat

在一个复杂的查询中,我有一个子查询来计数/汇总孩子:

->addSelect('(SELECT CONCAT(COUNT(c.id), \'|\', SUM(c.field1), \'|\', SUM(c.field2), \'|\', SUM(c.field3)) FROM App\Entity\Child c WHERE c.parent = p.id GROUP BY c.parent)')

在我升级到新版本的Symfony(4.2)和准则orm 2.6.1之前,此查询一直运行良好。我收到以下错误:

[Syntax Error] line 0, col 25: Error: Expected StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression, got 'COUNT'

我尝试使用CAST ... AS CHAR(25),但是它不起作用(出现相同的错误)。 有人可以帮我吗?

最好的问候, 乔纳森

2 个答案:

答案 0 :(得分:0)

看起来像是教义的StringPrimary解析器函数中的回归。 看完代码后,我对与该问题有关的问题发表了评论(虽然没有完整地描述它)。

本质上是新功能,缺少此部分,并且在遇到任何聚合功能时默认为错误:

            default:
            if ($this->isAggregateFunction($lookaheadType)) {
                return $this->AggregateExpression();
            }

PS。链接到相关问题: https://github.com/doctrine/doctrine2/issues/7205

答案 1 :(得分:0)

我找到了一种解决方法:安装doctrine extensions,然后用CONCAT_WS(DoctrineExtensions \ Query \ Mysql \ ConcatWs)替换CONCAT。 最好的问候