使用字段名称作为参数构建CakePHP3查询

时间:2016-04-26 09:45:18

标签: sql cakephp-3.0

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

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转换表达式&#39; position + 1&#39;到0并且没有通过&#39;位置+ 1&#39;到SQL查询。

有没有办法使用CakePHP查询构建器构建此查询,还是我必须使用原始sql语句?

1 个答案:

答案 0 :(得分:0)

正确的方法应该是

public class Deploy
{
    ...

    public static Deploy init()
    {
        InputStream i = Deploy.class
        .getClassLoader()
        .getResourceAsStream(
        "/com/example/props");
    }
}

但我想你可以做到

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

请参阅manual