Laravel Eloquent - 如何获取嵌套关系
Laravel Eloquent - How to get nested relationship
我有模型:能力、Objective、评级和教师
具有以下关系:
能力 有很多 Objective
Objective 有很多 评级, Objective 属于 能力
评级 属于 Objective, 评级 属于 老师
老师 有很多 评分
表:
能力:身份证、头衔等
objectives: id, title, competency_id, 等等 [competency_id 作为能力的 FK]
ratings: id, score, objective_id, teacher_id, etc [objective_id and teacher_id as FKs]
教师:id,first_name,last_name,等等
问题
我想 return 所有教师的评分按能力分组,objective如:
teacher1
-- competency1
---- objective1 score
---- objective2 score
-- competency2
---- objective1 score
---- objective2 score
teacher2
-- competency1
---- objective1 score
---- objective2 score
-- competency2
---- objective1 score
---- objective2 score
我可以获得按 objective 分组的所有能力,并且评级为:
Competency::with('objectives.ratings')->get();
如何让教师成为第一级:教师 - 能力 - objectives - 评级?
我能想到的一个捷径是在教师和目标之间建立多对多关系,使用评分作为支点table。所以老师和能力的距离就近了一点。
class Teacher
{
public function objectives()
{
return $this->belongsToMany(Objective::class, 'ratings');
}
}
稍后,您可以通过以下方式获取所有数据:
$teachers = Teacher::with('objectives.competency', 'objectives.ratings')->get();
从视图中,您可以执行以下操作:
@foreach($teachers as $teacher)
<h1>{{$teacher->first_name}} {{$teacher->last_name}}</h1>
@foreach($teacher->objectives->groupBy('competency_id') as $groupedObjectives)
<h2>Competency: {{$groupedObjecttives->first()->competency->title}}</h2>
@foreach($groupedObjectives as $objective)
<p>{{$objective->title}}: {{$objective->ratings->implode('score', ', ')}}</p>
@endforeach
@endforeach
@endforeach
我有模型:能力、Objective、评级和教师
具有以下关系:
能力 有很多 Objective
Objective 有很多 评级, Objective 属于 能力
评级 属于 Objective, 评级 属于 老师
老师 有很多 评分
表:
能力:身份证、头衔等
objectives: id, title, competency_id, 等等 [competency_id 作为能力的 FK]
ratings: id, score, objective_id, teacher_id, etc [objective_id and teacher_id as FKs]
教师:id,first_name,last_name,等等
问题
我想 return 所有教师的评分按能力分组,objective如:
teacher1
-- competency1
---- objective1 score
---- objective2 score
-- competency2
---- objective1 score
---- objective2 score
teacher2
-- competency1
---- objective1 score
---- objective2 score
-- competency2
---- objective1 score
---- objective2 score
我可以获得按 objective 分组的所有能力,并且评级为:
Competency::with('objectives.ratings')->get();
如何让教师成为第一级:教师 - 能力 - objectives - 评级?
我能想到的一个捷径是在教师和目标之间建立多对多关系,使用评分作为支点table。所以老师和能力的距离就近了一点。
class Teacher
{
public function objectives()
{
return $this->belongsToMany(Objective::class, 'ratings');
}
}
稍后,您可以通过以下方式获取所有数据:
$teachers = Teacher::with('objectives.competency', 'objectives.ratings')->get();
从视图中,您可以执行以下操作:
@foreach($teachers as $teacher)
<h1>{{$teacher->first_name}} {{$teacher->last_name}}</h1>
@foreach($teacher->objectives->groupBy('competency_id') as $groupedObjectives)
<h2>Competency: {{$groupedObjecttives->first()->competency->title}}</h2>
@foreach($groupedObjectives as $objective)
<p>{{$objective->title}}: {{$objective->ratings->implode('score', ', ')}}</p>
@endforeach
@endforeach
@endforeach