渴望加载嵌套关系

时间:2017-11-28 13:34:54

标签: php laravel eloquent

对于学校平台,我希望列出所有参加某个学校班级的学生的名单。在此列表中,我希望看到每个学生的id,last_name,first_name和类名。

Id +全名没问题,但加载所有关系并显示带有成绩的完整班级名称都不起作用。

我的关系如下:

student -> hasMany -> Enrollments
-----------Enrollments -> belongsTo -> offering
--------------------------offering -> belongsTo -> schoolClasses
--------------------------offering -> belongsTo -> schoolyears
--------------------------------------schoolClass -> belongsTo -> grade

班级名称由成绩名称+班级名称(例如幼儿园1 + A)组成。

我的EER如下:

EER diagram

目前我有这个工作:

enter image Example here

在我的控制器中执行此操作:

$students = Student::with('offerings.schoolClasses.grades')->get();
return view('student.overview', ['students' =>$students]);

这在我看来:

@foreach($students as $student)
<tr>
    <th scope="row">{{$student->id}}</th>
    <td>{{$student->first_name}}</td>
    <td>{{$student->last_name}}</td>
    <td>{{$student->offerings}}</td>
</tr>
@endforeach

有人可以帮助我获得最后一点吗?

2 个答案:

答案 0 :(得分:0)

我想你可以尝试这样:

$students = Student::with('offerings.schoolClasses.grades')
->with(array('offerings.schoolYears'=>function($query){
         $query->where('start', '=', $somedate)
     }))
->get();

你可以尝试这个来显示成绩:

{{$student->offerings->schoolClasses->grades->grade}}

答案 1 :(得分:0)

我发现错误,我的模型中关系的定义没有引用的外键。

在引用关系时我必须添加显式外键:

public function schoolClass(){
    return $this->belongsTo(SchoolClass::class,'school_class_id');
}

public function schoolyears(){
    return $this->belongsTo(Schoolyear::class,'schoolyear_id');
}

正确加载所有内容所需的school_class_idschoolyear_id