Если бы Laravel предоставил способ проходить замыкания в опорных точках, это было бы совсем не сложно, однако на данный момент есть 2 решения для загрузки отношений опорных точек
1.Ленивый нетерпеливый загрузить все.
# App\Task.php
public function users()
{
return $this->belongsToMany(App\User::class)->using(App\TaskUser::class)->withPivot('task_status_id');
}
$task->load('users', ...);
$task->users->each(function ($user) {
$user->pivot->load('status');
});
Проблема: Это делает запрос для каждого пользователя, связанного с задачей.Если вы не разбиваете на страницы свои результаты, это классическая проблема N + 1.
2.Вместо этого используйте hasMany и serveTo.
- Определение отношения $ user-> tasks_user (пользователь hasMany TaskUser)
- Определение отношения $ task-> tasks_user (Task hasMany TaskUser)
- Определить обратное (TaskUser относится к пользователю, TaskUser принадлежит к задаче)
- Определить последнее отношение task_user (TaskUser hasOne TaskStatus) (хотя выглядит как мне принадлежащее)
- Загрузить отношения
$task->load('task_user.user', 'task_user.status')
Нет реальной проблемы с этой реализацией, кроме того, что не используется belongsToMany
.