Kar*_*eni 51 php laravel laravel-5
我想在Same Query中使用WhereIn和Groupby来获取Result.
我试过这个:
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
SQLSTATE [42000]:语法错误或访问冲突:1055'sbrtpt.loading.id'不在GROUP BY中(SQL:select*from loading其中id为(14,15,16)group by vehicle_no)
Hus*_*sam 117
在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'
],
]
Run Code Online (Sandbox Code Playgroud)
您可能不需要禁用所有严格选项...请仔细阅读有关此问题的答案.
Ant*_*iro 101
这可能是一个SQL_MODE问题.在你的config/database.php
,在连接中,改变
strict => false
Run Code Online (Sandbox Code Playgroud)
如在
'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,
],
Run Code Online (Sandbox Code Playgroud)
ces*_*pon 14
config\database.php
文件设置'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');
Run Code Online (Sandbox Code Playgroud)
Gou*_*lfy 14
更新config/database.php
放:
'mysql' => [
'strict' => false,
],
Run Code Online (Sandbox Code Playgroud)
代替:
'mysql' => [
'strict' => true,
],
Run Code Online (Sandbox Code Playgroud)
并且不要忘记清除缓存:
php artisan config:cache
Run Code Online (Sandbox Code Playgroud)
小智 12
无需更改系统中的任何位置,只需使用 laravel 中的代码
\DB::statement("SET SQL_MODE=''");//this is the trick use it just before your query
$data=Task::where('user_id', Auth::user()->id)->where('status', 0)->groupBy('task_code')->get(['id','task_code', 'title']);
Run Code Online (Sandbox Code Playgroud)
Chr*_*kwo 12
您可以将'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', // This has been deprecated and will throw an error in mysql v8
'NO_ENGINE_SUBSTITUTION'
],
]
Run Code Online (Sandbox Code Playgroud)
小智 6
每当在 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')
Run Code Online (Sandbox Code Playgroud)
在配置文件中禁用严格模式也是一种不好的做法。这样做可能会导致损坏的数据进入数据库,例如没有任何警告的无效日期。除非绝对必要,否则不要这样做。
小智 6
SQLSTATE[42000]: Syntax error or access violation: 1055 in GROUP BY
Run Code Online (Sandbox Code Playgroud)
如果出现上述错误,请将以下内容添加到文件夹database.php
中的文件中config
:
SQLSTATE[42000]: Syntax error or access violation: 1055 in GROUP BY
Run Code Online (Sandbox Code Playgroud)
小智 6
后来google了一下才知道是设置导致的问题,将config/database.phpsql_mode
的配置修改为。strict => false
参考: https: //stdworkflow.com/147/laravel-syntax-error-or-access-violation-1055-error
小智 5
我也遇到了这个问题,但是将更 'strict' => true
改为后 'strict' => false
,错误消失了。
您可以在以下位置找到此设置:
config \ database.php
'mysql' => [
...
'strict' => false,
...
]
Run Code Online (Sandbox Code Playgroud)