CakePHP 3 QueryBuilder:少数值的条件不会生成'IN'语句

时间:2015-12-04 09:21:18

标签: php cakephp cakephp-3.0

在CakePHP 2中,当你写这样的东西时:

$Model->find('all', ['conditions' => ['field' => 1]]);

您将获得如下所示的查询:

SELECT * FROM model WHERE model.field = 1;

或者当你写这样的东西时:

$Model->find('all', ['conditions' => ['field' => [1,2,3,5]]]);

你会得到这样的查询:

SELECT * FROM model WHERE model.field IN (1,2,3,5);

我的意思是,'IN'语句是根据参数的类型自动生成的。

另一方面,当你写

时,在CakePHP 3中
$Table->find()->where(['field' => [1,2,3]])->all();

您将收到错误,例如

  

无法将值转换为整数

因为它会生成如下语句:

SELECT * FROM table WHERE table.field = Array();

这是一个错误还是一个功能?

1 个答案:

答案 0 :(得分:2)

According to the official docs您需要在CakePHP 3中指明列数据类型: -

$Table->find()->where(['field' => [1,2,3], ['field' => 'integer[]']])->all();

integer[]告诉Cake期望一个整数数组。

或者,您可以在条件中加入IN: -

$Table->find()->where(['field IN' => [1,2,3]])->all();

如果只有一个整数值传递,两种情况都会将数据转换为数组(如果尚未这样,那么IN将按预期工作。