【问题标题】:Laravel Eloquent Model Syntax error or access violation on groupByLaravel Eloquent 模型语法错误或 groupBy 上的访问冲突
【发布时间】:2021-06-13 19:21:55
【问题描述】:

MySQL 结构

id
key
display_name
value
details
group
created_at
updated_at

Laravel 资源索引

    public function index()
    {

        $settings = Setting::groupBy('group')->select('id','group as name')->orderBy('id', 'ASC')->get();
        
        return view('settings.general'), compact('settings'));
    }

当我运行代码时,它是如何出错的:

SQLSTATE[42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“demodb.settings.id”;这与 sql_mode=only_full_group_by 不兼容(SQL:select id, group as name from settings group by group order by id asc)

【问题讨论】:

  • 还在 database.php mysql 连接中启用 strict=>false
  • 这是一个非常糟糕的主意,因为它允许运行错误的查询
  • 我不想开启严格模式

标签: php mysql laravel laravel-models


【解决方案1】:

当您按“组”分组时,每个组可以有多个 id,因此这是一种逻辑,您不能*在选择列表中拥有 id。

*因为您的查询无法猜测

2 种解决方案,取决于您想要做什么:

  • 从选择中检索 id

  • 将id添加到组中

【讨论】:

    【解决方案2】:

    每一列都必须在 GROUP By 中或具有聚合函数,如示例 MIN(id)

    public function index()
    {
    
        $settings = Setting::groupBy('group')->select('MIN(d) AS id,group as name')->orderBy('id', 'ASC')->get();
        
        return view('settings.general'), compact('settings'));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 2017-04-16
      • 2023-04-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 2017-07-31
      • 2017-10-29
      相关资源
      最近更新 更多