Laravel:将复杂的关系传递给视图

时间:2017-08-30 13:59:37

标签: laravel

这可能有点令人困惑,所以请跟我一起承担

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

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

还有一个带有成绩列的pivot exercise_user表格,因此我可以记录每次练习的用户成绩。

到目前为止,非常好。

事情是:在课程页面上,我想在该课程中显示所有练习,并在其中显示当前用户的评分。

在Controller,我首先检查用户是否注册了该课程($ request-&gt; user() - &gt; courses-&gt; contains($ course))并将该课程传递给视图。< / p>

在那之后,我循环完成该课程的每个练习并显示它。

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

修改 这是一个EER图

a diagram

1 个答案:

答案 0 :(得分:2)

你可以急切加载这样的课程;

 <out:Row xtt:separator="," xtt:quotes="always">
        <out:PayGroupCode>93JH</out:PayGroupCode>
        <out:LegacyID>93JH000660265</out:LegacyID>
        <out:WorkdayID>660265</out:WorkdayID>
        <out:Name>SixWFNLastname SixWFNFirstname</out:Name>
        <out:Status>Active</out:Status>
        <out:Transaction>CHANGE</out:Transaction>
        <out:Process_Type>DTA</out:Process_Type>
        <out:Type>Address</out:Type>
        <out:SubType>Country_Region</out:SubType>
        <out:Effective_Date>2017-03-06</out:Effective_Date>
        <out:Old_Value>WORK AMEC 2020 Winston Park Drive, Suite 700 Oakville L6H 6X7 CA ON
            Ontario</out:Old_Value>
        <out:New_Value>AB</out:New_Value>
    </out:Row>

然后在你的刀片中:

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

有关Eager Loading的更多信息。

修改

如果你在课程和一对一之间建立关系,我认为这可行:

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

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

$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
    }
]);