【问题标题】:Laravel - Eloquent relationship belongsToMany groupBy "Syntax error or access violation" ErrorLaravel - 雄辩的关系属于ToMany groupBy“语法错误或访问冲突”错误
【发布时间】:2017-12-03 12:56:58
【问题描述】:

来自这个问题:How to GROUP and SUM a pivot table column in Eloquent relationship?

我在我的User 模型中使用了这个代码:

public function teams() {
    return $this->belongsToMany('App\Models\Team', 'team_members', 'user_id', 'team_id')
        ->groupBy('pivot_team_id');
}

我想使用->groupBy(),因为在我的teams 中,一个user 可以作为多个team_members 用于不同的角色。我不希望 team 记录重复。

但是当我尝试访问例如在我的页面dd(Auth::user()->teams) 上使用此代码,Laravel 抛出了以下异常:

SQLSTATE[42000]: Syntax error or access violation: 1055 'laravel.teams.id' isn't in GROUP BY (SQL: select `teams`.*, `team_members`.`user_id` as `pivot_user_id`, `team_members`.`team_id` as `pivot_team_id` from `teams` inner join `team_members` on `teams`.`id` = `team_members`.`team_id` where `team_members`.`user_id` = 3 group by `pivot_team_id`)

然后我尝试自己在错误中运行完全相同的 SQL,它起作用了:

为什么会这样?我哪里弄错了?

【问题讨论】:

标签: php mysql laravel


【解决方案1】:

在@ayip 的帮助下,问题出在config/database.php 中的strict 模式。

目前只有两种解决方案:

  1. 禁用严格模式;或
  2. 包括在groupBy 中的belongsToMany 表或SUM() 等聚合函数中选择的所有列。

这是2中的一个例子:

    return $this->belongsToMany('App\Models\Team', 'team_members', 'user_id', 'team_id')
        ->selectRaw('sum(team_members.team_member_role_id) as pivot_count') //because this is different across records beside others in group by
        ->groupBy('teams.id', 'teams.name', 'teams.description', 'team_members.user_id', 'team_members.team_id');

请注意,您可以在不同的记录中选择SUM() 列,但可以按其余列分组,并且您不关心该特定列。例如:

job         |   gender
programmer  |   M
programmer  |   F
accountant  |   M

如果你不想区分不同性别的工作,那么SUM()gender,所以你不必在GROUP BY之后添加那一列。

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 2017-05-16
    • 1970-01-01
    • 2019-02-10
    • 2019-06-06
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多