猿问

如何在另一个集合中拥有一个集合?

我有一个问题..在我的程序中,我需要一个集合User,另一个集合,其中包含用户参与的所有项目以及hours他在每个项目中工作的数量。

我有 3 个表来解决这个问题:

  • users 表,很简单的搭配。

  • projects 桌子。

  • time_entries,与user_idproject_id

Aproject可以有很多time_entriesuserto。

我已经测试过了,但它不起作用:

$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();


呼啦一阵风
浏览 129回答 1
1回答

墨色风雨

您可以使用Laravel Eloquent定义/模型之间的多对多关系:UserProject/** 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;}
随时随地看视频慕课网APP
我要回答