DQL 和 MAX 函数调用作为 CONCAT 参数



>我有一个存储库函数,具有以下指令:

$QB = $this->_em->createQueryBuilder();
$QB ->addSelect("CONCAT(dsub2.dagId, MAX(tsub2.executionDate))")
    ->from(TaskInstance::class, 'tsub2')
    ->join('tsub2.dag', 'dsub2')
    ->addGroupBy('dsub2.dagId')
    ;

调用$QB->getQuery()->getSQL();$QB->getQuery()->getResult()会引发错误,指出:

Expected StateFieldPathExpression | string |输入参数 |函数返回字符串 |聚合表达式,得到"MAX">

addSelect调用完全替换为以下代码片段也不起作用,并引发相同的错误:

->addSelect(
    $QB->expr()->concat(
        'dsub2.dagId'
        , $QB->expr()->max('tsub2.executionDate')
    )
)

您是否知道将函数调用嵌套为CONCAT参数的正确方法(或解决方法MAX方法?

学说 DBAL v2.6.3 ;教义ORM v2.6.1

我遇到了同样的问题,我认为这是 v2.6.1 上的教义错误。我发现的技巧与其说是真正的解决方案,不如说是一种解决方法:

你必须改变

$QB->addSelect("CONCAT(dsub2.dagId, MAX(tsub2.executionDate))")

$QB->addSelect("CONCAT(dsub2.dagId, IF(true=true, MAX(tsub2.executionDate), ''))")

通过插入 IF(包括 MAX(,学说不会"看到"MAX 。

但。。。在 IF 中你需要一个条件而 Doctrine 不喜欢IF(true, 1, 0),所以另一个技巧是 if 条件:true=true

最新更新