【问题标题】:Build CakePHP3 query with field name as parameter使用字段名作为参数构建 CakePHP3 查询
【发布时间】:2016-04-26 09:45:18
【问题描述】:

我想构建(例如)以下 sql 查询,其中匹配数据行的位置字段应加一:

UPDATE images SET position = position + 1 WHERE (position > 2 AND position <= 4)

我尝试使用 CakePHP 3 的查询构建器构建查询:

$query->update()
 ->set(['position' => 'position + 1'])
 ->where(['position >' => 2])
 ->andWhere(['position <=' => 4])
 ->execute();

由于 position 是一个整数,CakePHP 将表达式 'position + 1' 转换为 0,并且不将 'position + 1' 传递给 sql 查询。

有没有办法使用 CakePHP 查询构建器构建这个查询,或者我必须为此使用原始 sql 语句?

【问题讨论】:

  • 只需set(['position = position + 1']

标签: sql cakephp-3.0


【解决方案1】:

正确的做法应该是

$expression = new QueryExpression('position = position + 1');
$query->update()
    ->set([$expression])
    ->where(['position >' => 2])
    ->andWhere(['position <=' => 4])
    ->execute();

但我想你可以简单地做

set(['position = position + 1']);

manual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多