我想在同一个查询中使用WhereIn和Group By来获取Result。
我试过这个:
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();
但我收到此错误消息:
SQLSTATE [42000]:语法错误或访问冲突:1055'sbrtpt.loading.id'不在GROUP BY中(SQL:select * from loading其中id为(14,15,16)group by vehicle_no)
在config\database.php
- > "mysql"
阵列
设置'strict' => false
以禁用所有。
你可以留下'strict' => true
并添加模式到"mysql"
选项
'mysql' => [
...
....
'strict' => true,
'modes' => [
//'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION'
],
]
你可能不需要禁用所有严格的选项...请关注这个answer关于这个问题。
这可能是一个SQL_MODE问题。在你的config/database.php
,在连接中,改变
strict => false
如在
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
我也有这个问题,但在更改'strict' => true
后,'strict' => false
,错误消失了。
您可以在以下位置找到此设置:
配置\ database.php中
'mysql' => [
...
'strict' => false,
...
]
每当在eloquent中使用groupBy时,总是在select()函数中包含groupBy函数中使用的列名。
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->select('vehicle_no')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();//add select('vehicle_no')
在配置文件中禁用严格模式也是一种不好的做法。这样做可能会导致损坏的数据进入数据库,例如无效日期而没有任何警告。除非绝对必要,否则不要这样做。
在'strict' => false
设置config\database.php
可能是一个安全问题。所以,一个简单的Laravel解决方案可以先调用get()
然后调用groupBy('vehicle_no)
:
$loadids = explode("#@*", $reciptdet->loading_id);
$loadingdatas = DB::table('loading')->whereIn('id', $loadids)->get();
$grouped = $loadingdatas->groupBy('vehicle_no');