sik*_*kor 6 php cakephp cakephp-3.0
在CakePHP 2中,当你写这样的东西时:
$Model->find('all', ['conditions' => ['field' => 1]]);
Run Code Online (Sandbox Code Playgroud)
您将获得如下所示的查询:
SELECT * FROM model WHERE model.field = 1;
Run Code Online (Sandbox Code Playgroud)
或者当你写这样的东西时:
$Model->find('all', ['conditions' => ['field' => [1,2,3,5]]]);
Run Code Online (Sandbox Code Playgroud)
你会得到这样的查询:
SELECT * FROM model WHERE model.field IN (1,2,3,5);
Run Code Online (Sandbox Code Playgroud)
我的意思是,'IN'语句是根据参数的类型自动生成的.
另一方面,当你写的时,CakePHP 3
$Table->find()->where(['field' => [1,2,3]])->all();
Run Code Online (Sandbox Code Playgroud)
你会收到一个错误,例如
无法将值转换为整数
因为它生成如下语句:
SELECT * FROM table WHERE table.field = Array();
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是一个功能?
根据官方文档,您需要在 CakePHP 3 中指示列数据类型:-
$Table->find()->where(['field' => [1,2,3], ['field' => 'integer[]']])->all();
Run Code Online (Sandbox Code Playgroud)
integer[]告诉 Cake 期待一个整数数组。
IN或者,您可以在您的条件中包括:-
$Table->find()->where(['field IN' => [1,2,3]])->all();
Run Code Online (Sandbox Code Playgroud)
如果数据尚未转换为数组,这两种情况都会将其转换为数组,这样,IN如果仅传递整数值,则数据将按预期工作。
| 归档时间: |
|
| 查看次数: |
5273 次 |
| 最近记录: |