gpt4 book ai didi

php - Laravel - Eloquent 关系 belongsToMany groupBy "Syntax error or access violation"错误

转载 作者:行者123 更新时间:2023-11-29 06:01:07 25 4
gpt4 key购买 nike

来自这个问题: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

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

最佳答案

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

目前只有2种解决方案:

  1. 禁用严格模式;或
  2. 包括在 belongsToMany 中选择的所有列groupBy 中的表格或聚合函数,例如 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 之后添加该列.

关于php - Laravel - Eloquent 关系 belongsToMany groupBy "Syntax error or access violation"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44831649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com