Laravel groupBy 选择多个字段
Posted
技术标签:
【中文标题】Laravel groupBy 选择多个字段【英文标题】:Laravel groupBy with select multiple field 【发布时间】:2021-11-03 18:36:55 【问题描述】:我可以选择 country
和 groupBy 结果如下,别名为 total
:
Data::select('country', DB::raw('count(*) as total'))
->groupBy('country')
->get();
上面的代码运行良好。
这里我只能选择country
字段,但是我需要同时选择name
,positions
字段,这里如何选择多个字段?
【问题讨论】:
【参考方案1】:首先,您需要指定遇到的错误/异常,但您可以通过执行添加其他列
DB::table('table_name')->select([DB::raw('count(*) as total'), 'name', 'positions', 'country'])
->groupBy('country')
->get());
您也可能遇到需要更改 sql_mode 的访问冲突异常
【讨论】:
现在还是错误SQLSTATE[42000]: Syntax error or access violation
你试过改变你的sql_mode吗? SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
您也可以在 database.php 中禁用 only_full_group_by 模式,但这可能会导致您的应用程序出现一些安全漏洞。不可取。我会建议你坚持 groupBy 的严格兼容性【参考方案2】:
您必须使用如下设置并更改代码。
-
打开
config/database.php
在mysql连接设置中找到strict
键
将值设置为false
使用下面的代码
ModelName::groupBy('country')
->selectRaw('count(*) as total, country, name, positions')
->get()
【讨论】:
这可行,但我不想将严格模式更改为 false。在不改变严格模式的情况下还有其他方法吗?以上是关于Laravel groupBy 选择多个字段的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 的 hasMany 关系中使用 groupBy
GroupBy() 覆盖我的选择语句 Eloquent Laravel