【发布时间】:2020-04-20 05:39:08
【问题描述】:
我想使用查询构建器在 CakePHP 中编写以下查询:
SELECT
(CASE
WHEN `ai` = 1 THEN CONCAT_WS(" ", `name`, " (AI)") ELSE `name`
END) AS `name`
FROM `drivers`;
我尝试了几种方法,但似乎总是失败。首先,我尝试了这个:
return $query->select(function(Query $query) {
return $query->newExpr()->addCase([
$query->newExpr()->add(['ai' => 1])
], [
$query->newExpr()->add(['name' => 'CONCAT_WS(" ", `name`, " (AI)")'])
]);
});
我已经试过了:
return $query->select(function(Query $query) {
return $query->newExpr()->addCase([
$query->newExpr()->add(['ai' => 1])
], [
$query->newExpr()->add(['name' => $query->func()->concat([" ", 'name', " (AI)"])])
]);
});
但在这两种情况下,我都会收到此错误:
警告 (2): array_combine(): 两个参数应该有相同数量的元素 [CORE/src/ORM/ResultSet.php, line 528]
传递给 Cake\ORM\Entity::__construct() 的参数 1 必须是数组类型,bool 给定,在 /var/www/html/vendor/cakephp/cakephp/src/ORM/ResultSet.php 中调用第 602 行
所以这两个结果都是相同的查询,但它仍然是错误的......
【问题讨论】:
标签: php cakephp case query-builder cakephp-3.x