从这个问题: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`)
为什么会这样?我在哪里弄错了?
答案 0 :(得分:1)
在@ayip的帮助下,问题出在strict
的{{1}}模式。
到目前为止只有两种解决方案:
config/database.php
中belongsToMany
表格中选择的所有列或groupBy
等汇总函数。这是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
之后添加该列。