Как иметь коллекцию в другой коллекции? - PullRequest
0 голосов
/ 09 мая 2019

У меня проблема ... В моей программе мне нужно иметь коллекцию User, еще одну коллекцию со всеми проектами, в которых участвовал пользователь, и количество hours, в котором он работал в каждом проекте.

У меня есть 3 таблицы для этой проблемы:

  • users стол, прет простой с.
  • projects таблица.
  • time_entries, с user_id и project_id.

A project может иметь много time_entries и user до.

У меня есть тест, но он не работает:

$users = User::join('time_entries', 'users.id', '=', 'time_entries.user_id')
  ->whereBetween('spent_on', [($request->input('debut')), ($request->input('fin'))])
  ->join('projects', 'time_entries.project_id', '=', 'projects.id')
  ->selectRaw('user_id , project_id, sum(hours) as sum')
  ->get();

1 Ответ

0 голосов
/ 09 мая 2019

Вы можете определить отношение «многие ко многим» между вашими User / Project моделями, используя Laravel Eloquent :

/** User.php */

public function projects()
{
    return $this
            ->belongsToMany(Project::class, 'time_entries')
            ->withPivot('hours');
}

-

/** Project.php */

public function users()
{
    return $this
            ->belongsToMany(User::class, 'time_entries')
            ->withPivot('hours');
}

Тогда просто получите доступ к отношениям:

/** UserController.php */

public function myFunction()
{
    $users = User::with('projects')->get();
    // this $users collection will have another collection inside (projects).


    $projects_of_first_user = $users->first()->projects;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...