在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'语句是根据参数的类型自动生成的。
另一方面,当你写
$Table->find()->where(['field' => [1,2,3]])->all();
您将收到错误,例如
无法将值转换为整数
因为它会生成如下语句:
SELECT * FROM table WHERE table.field = Array();
这是一个错误还是一个功能?
答案 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
将按预期工作。