Вы не выбираете псевдонимы, выражение CASE
будет просто находиться в предложении SELECT
как есть, что не нравится ORM, так как оно пытается сопоставить ключи списка выбора с ключами извлеченной строки .
Возможно, для этого может потребоваться более полезное и более полезное сообщение об ошибке, или, возможно, ORM может даже предупредить при компиляции запроса, не уверен.
В любом случае, если коротко, вернуть массив с псевдоним, такой как:
return $query->select(function(Query $query) {
$case = $query->newExpr()->addCase(
[
// WHEN
$query->newExpr()->add(['ai' => 1])
],
[
// THEN
$query->func()->concat([' ', $query->identifier('name'), ' (AI)']),
// ELSE
$query->identifier('name')
]
);
return [
'name' => $case,
];
});
Также обратите внимание, что вам нужно напрямую передать выражение функции CONCAT()
, не заключайте его в другое выражение, которое присваивает результат чему-то, что не будет работать , Кроме того, вам необходимо убедиться, что идентификаторы передаются как таковые, в настоящее время ваше значение name
будет связано как строковый литерал в кавычках, а также вам потребуется второе значение идентификатора для части ELSE
.
См. также