2017-08-30 48 views
0

这可能有点令人困惑,所以请与我联系Laravel:将复杂的关系传递给视图

我正在设计一个在线课程的应用程序。 我有以下表格:用户,课程,练习。

每门课程可以有许多练习,每个用户可以参加很多课程(有一个course_user表)。

还有一个pivot_access_user表格,里面有一个成绩栏,所以我可以记录他们每次练习的用户成绩。

到目前为止,这么好。

问题是:在课程的页面上,我想显示他们在该课程中的所有练习,以及当前用户的评分。

在Controller中,我首先检查用户是否注册了该课程($ request-> user() - > courses-> contains($ course)),然后将该课程传递给视图。

之后,我循环浏览那个课程的每一个练习并显示它。

什么是在每门课程中显示用户评分的最佳方法?

编辑 Here`s一个EER图

a diagram

回答

2

你可以预先加载的excersices你当然这样的;

$course = Course::find($id)->with("excersices")->first(); 

,然后在刀片:

@foreach($course->excercises as $excercise) 
    {{ $excercise->pivot->grade }} 
@endforeach 

更多信息有关Eager Loading

编辑

如果你对许多课程和excersice一个之间的关系,我认为这可能是工作:

$course = Course::find($id)->with([//get this course 
    'users' => function ($query) { 
     $query->where('id', $request->user()->id); //with only this user 
    },'users.excercises' => function ($query) { 
     $query->where('course_id', $id); //user excercises for this course 
    } 
]); 

而在刀片,我相信是这样的:

@foreach($course->users->excercises as $excercise) 
    {{ $excercise->pivot->grade }} 
@endforeach 
+0

简单而聪明! Muchas gracias:P – Souljacker

+0

sisabíahablaba enespañolXD –

+0

刚刚发生我不是这个:(这样,我渴望加载course_exercise数据透视表,但我需要的是急于加载exercise_user表。我想我可以循环所有练习与该课程,并找到每个人的用户的评分,但这听起来不像更实际的方法:( – Souljacker