Laravel GroupBy 在 mysql 中工作,但在 MariaDB 中抛出错误

Posted

技术标签:

【中文标题】Laravel GroupBy 在 mysql 中工作,但在 MariaDB 中抛出错误【英文标题】:Laravel GroupBy work in mysql but throws error in MariaDB 【发布时间】:2021-04-05 23:26:28 【问题描述】:

我在 mysql (5.7.21) 数据库中运行以下查询没有任何问题,但此查询在我的托管服务器数据库 MariaDB (10.1.47-MariaDB) 上引发错误,我没有超级权限更改sql mode

$projects =  V2Project::leftJoin('v2_project_locations as v2pl', 'v2pl.project_id', 'v2_projects.id')
             ->leftJoin('v2_locations as v2l', 'v2l.id', 'v2pl.location_id')
             ->selectRaw('v2_projects.id, v2_projects.name, group_concat(v2l.name) as locations')
             ->withDepartmentInMind()
             ->onlyAuthorizedObjects();

if($by_current_step == true) 
    $projects = $projects->where('current_step', 'plan');


if($search_val) 
    $projects = $projects->whereIn('v2_projects.id', $search_val);


$projects = $projects->groupBy('v2_projects.id')->paginate(10); 
$projects->appends(Input::except('page', '_token'));

错误:

SQLSTATE[42000]: Syntax error or access violation: 1055 'pm_form_moe.v2_projects.name' isn't in GROUP BY (SQL: select v2_projects.id, v2_projects.name from `v2_projects` group by `v2_projects`.`id`)

我也尝试添加每一列,但我需要与 mySQL 相同的功能而不添加所有列。

【问题讨论】:

根据这个我猜你的mysql服务器是旧版本...***.com/questions/33591606/… 你使用的是哪个版本的 MySQL / MariaDB groupBy('v2_projects.id, v2_projects.name') MariaDB 版本:10.1.47-MariaDB,MySQL 版本:5.7.21 这能回答你的问题吗? Mysql ONLY_FULL_GROUP_BY mode issue - Pick single Image URL(any) for each Album检查解决方案3,但推荐1和2 【参考方案1】:

阅读ONLY_FULL_GROUP_BY,然后决定从SELECT 中删除什么或向GROUP BY 添加什么。不用担心设置标志;您的代码很糟糕,需要修复。而且老版本不抱怨的时候就不好了。

(如果您向我们展示生成的 SQL,我们可以进一步讨论。)

【讨论】:

以上是关于Laravel GroupBy 在 mysql 中工作,但在 MariaDB 中抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 6,MYSQL - 如何使用 Laravel Querybuilder 或 Model Eloquent 将子查询与 GroupBY 左连接?

Laravel Eloquent groupBy orderBy 在 MariaDB 中给出不同的结果

msql sql_model 详解(laravel5.6为例)

msql sql_model 详解(laravel5.6为例)

如何在关系 Laravel 中使用“groupBy”

如何在 Laravel 的 hasMany 关系中使用 groupBy