【问题标题】:Laravel groupBy with select multiple fieldLaravel groupBy 选择多个字段
【发布时间】:2021-11-03 18:36:55
【问题描述】:

我可以选择 country 和 groupBy 结果如下,别名为 total

Data::select('country', DB::raw('count(*) as total'))
->groupBy('country')
->get();

上面的代码运行良好。 这里我只能选择country字段,但是我需要同时选择namepositions字段,这里如何选择多个字段?

【问题讨论】:

    标签: laravel eloquent laravel-query-builder


    【解决方案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】:

    您必须使用如下设置并更改代码。

    1. 打开config/database.php
    2. 在mysql连接设置中找到strict
    3. 将值设置为false

    使用下面的代码

    ModelName::groupBy('country')
    ->selectRaw('count(*) as total, country, name, positions')
    ->get()
    

    【讨论】:

    • 这可行,但我不想将严格模式更改为 false。在不改变严格模式的情况下还有其他方法吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多