DQL 和 MAX 函数调用作为 CONCAT 参数
DQL and MAX function call as a CONCAT argument
我有一个具有以下说明的存储库函数:
$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 | InputParameter | FunctionsReturningStrings | AggregateExpression, got 'MAX'
用以下代码片段完全替换 addSelect
调用也不起作用,并会引发相同的错误:
->addSelect(
$QB->expr()->concat(
'dsub2.dagId'
, $QB->expr()->max('tsub2.executionDate')
)
)
您是否知道将 MAX
函数调用嵌套为 CONCAT
参数的正确方法(或解决方法)?
Doctrine DBAL v2.6.3 ; Doctrine ORM v2.6.1
我遇到了同样的问题,我认为这是 v2.6.1 上的 Doctrine Bug。
我发现的技巧与其说是真正的解决方案,不如说是一种解决方法:
你必须改变
$QB->addSelect("CONCAT(dsub2.dagId, MAX(tsub2.executionDate))")
来自
$QB->addSelect("CONCAT(dsub2.dagId, IF(true=true, MAX(tsub2.executionDate), ''))")
通过插入一个 IF(包括 MAX),Doctrine 将不会 "see" MAX。
但是...在 IF 中你需要一个条件,而 Doctrine 不喜欢 IF(true, 1, 0)
,所以另一个技巧是 if 条件:true=true
.
我有一个具有以下说明的存储库函数:
$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 | InputParameter | FunctionsReturningStrings | AggregateExpression, got 'MAX'
用以下代码片段完全替换 addSelect
调用也不起作用,并会引发相同的错误:
->addSelect(
$QB->expr()->concat(
'dsub2.dagId'
, $QB->expr()->max('tsub2.executionDate')
)
)
您是否知道将 MAX
函数调用嵌套为 CONCAT
参数的正确方法(或解决方法)?
Doctrine DBAL v2.6.3 ; Doctrine ORM v2.6.1
我遇到了同样的问题,我认为这是 v2.6.1 上的 Doctrine Bug。 我发现的技巧与其说是真正的解决方案,不如说是一种解决方法:
你必须改变
$QB->addSelect("CONCAT(dsub2.dagId, MAX(tsub2.executionDate))")
来自
$QB->addSelect("CONCAT(dsub2.dagId, IF(true=true, MAX(tsub2.executionDate), ''))")
通过插入一个 IF(包括 MAX),Doctrine 将不会 "see" MAX。
但是...在 IF 中你需要一个条件,而 Doctrine 不喜欢 IF(true, 1, 0)
,所以另一个技巧是 if 条件:true=true
.