Laravel - Eloquent relationship areToMany groupBy"语法错误或访问违规"错误

时间:2017-06-29 17:36:34

标签: php mysql laravel

从这个问题: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(),因为在我的team中,单个user可以充当不同角色的多个team_member。我不希望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,它有效: Working example

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

1 个答案:

答案 0 :(得分:1)

在@ayip的帮助下,问题出在strict的{​​{1}}模式。

到目前为止只有两种解决方案:

  1. 禁用严格模式;或
  2. 包括config/database.phpbelongsToMany表格中选择的所有列或groupBy等汇总函数。
  3. 这是2中的一个例子:

    SUM()

    请注意,您可以选择不同记录中的 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之后添加该列。