对于学校平台,我希望列出所有参加某个学校班级的学生的名单。在此列表中,我希望看到每个学生的id,last_name,first_name和类名。
Id +全名没问题,但加载所有关系并显示带有成绩的完整班级名称都不起作用。
我的关系如下:
student -> hasMany -> Enrollments
-----------Enrollments -> belongsTo -> offering
--------------------------offering -> belongsTo -> schoolClasses
--------------------------offering -> belongsTo -> schoolyears
--------------------------------------schoolClass -> belongsTo -> grade
班级名称由成绩名称+班级名称(例如幼儿园1 + A)组成。
我的EER如下:
目前我有这个工作:
在我的控制器中执行此操作:
$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
有人可以帮助我获得最后一点吗?
答案 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_id
和schoolyear_id
。