Selamlar,
Team Model:
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class)
->using(TeamUser::class)
->withPivot('role_id', 'id')
->as('member')
->withTimestamps();
}
TeamUser Pivot Model:
public function role(): BelongsTo
{
return $this->belongsTo(Role::class);
}
Controller:
$responseTeam = Team::query()
->where('id', $teamId)
->with([
'users' => function (BelongsToMany $query) use ($teamId) {
return $query->withCount([
'votes' => function (Builder $query) use ($teamId) {
return $query->where('team_id', $teamId);
}
]);
},
'invitations:team_id,email,created_at'
])
->first();
return TeamUserResource::make($responseTeam);
TeamUserResource İlgilendiren kısım($this->users ile başka bir resource'e atıyorum. Aşağıdaki o kısım.):
'name' => $this->name,
'email' => $this->email,
'image' => $this->image,
'team_user_id' => $this->member->id,
'role' => $this->member->role->name,
'votes_count' => $this->votes_count
Böyle bir kurguda pivot model üzerindeki role relationship n+1 probleminden dolayı fazla sorgu atıyor. Bu pivot model üzerinde nasıl toplu şekilde çekebilirim. With ile örneğin şöyle bir sorgu yaptığımda hata ile karşılaşıyorum.
$responseTeam = Team::query()
->where('id', $teamId)
->with([
'users' => function (BelongsToMany $query) use ($teamId) {
return $query->with('member.role')->withCount([
'votes' => function (Builder $query) use ($teamId) {
return $query->where('team_id', $teamId);
}
]);
},
'invitations:team_id,email,created_at'
])
->first();
Bunun için bir paket söylenmiş fakat paketsiz nasıl halledilebilir ?
İlgili paket: https://github.com/ajcastro/eager-load-pivot-relations