[英]Laravel, select and groupBy - DB::raw - issue
我一直在尝试解决这个问题,我的第一个问题是这个问题及其按预期工作的方式。
问题是我不能选择比groupBy中更多的列,所以我找到了一个解决方案: DB::raw('created_at as created_at')
但这给了我:
SQLSTATE[42000]: Syntax error or access violation: 1055 created_at' isn't in GROUP BY
广告,如果我将“ create_at” groupBy(DB::raw('create_at'))
和“ concept”添加到groupBy,则将它们分组,这是我想要避免的。
我的代码是:
@forelse($transaction->where('status', '!=', 'ok')
->select('user_id', 'option_id', 'status', 'concept', DB::raw('created_at as created_at'), DB::raw('concept as concept'))
->groupBy('user_id')
->groupBy('option_id')
->groupBy('status')
->get() as $transaction)
{{$transaction->concept}}
{{$transaction->created_at}}
谢谢 :)
SELECT语句中的每一列也必须位于GROUP BY子句中。
在MySQL 5.7.5或更高版本中,将only_full_group_by模式设置为false是一个例外,但是假设所有行的额外列都具有相同的值https://dev.mysql.com/doc/refman/5.7/en /group-by-handling.html
您也可以使用技巧为未分组的列获取MAX()或MIN(),但除非将它们添加到GROUP BY语句中,否则您将无法获得每一列的实际值,从而完成此操作
默认情况下启用Mysql严格模式。 禁用严格模式,它将解决您的问题。
在config / database.php中的'mysql'
'strict' => true,
虚假。
'strict' => false,
好吧,多亏了@noufalcep和@Rob Fonseca Rob,我提出了这个解决方案,我认为这是在5.4版本严格设置为true之后的Laravel中发生的。
因此,我没有完全禁用它,而是这样做了:
'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' => true, #####I COMMENTED THIS####
'modes' => [
//'ONLY_FULL_GROUP_BY', #####AND THIS####
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION',
],
'engine' => null,
],
顺便说一句,MAX MIN不适用于我,它仍在请求将其添加到groupBy中并请求一个数组
希望这对下一个有所帮助。
快乐编码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.