Laravel Eloquent-如何获得嵌套关系

时间:2019-12-11 15:37:11

标签: laravel eloquent relationship eager-loading

我有以下模型:能力,目标,评分和教师

具有以下关系:
能力 有很多 客观
客观 有很多 评分客观 属于 能力 < br /> 评分 属于 客观评分 属于<< / em> 老师 < br /> 老师 有很多 评分

表格:
权限:ID,标题等
目标:ID,标题,capacency_id等[competency_id作为能力的FK]
评分:ID,得分,objective_id,teacher_id等[objective_id和Teacher_id为FK]
老师:ID,名字,姓氏等

问题

我想归还所有具有按能力和目标分组的老师的评分,例如:

teacher1  
-- competency1  
---- objective1 score  
---- objective2 score  
-- competency2  
---- objective1 score  
---- objective2 score  
teacher2  
-- competency1  
---- objective1 score  
---- objective2 score  
-- competency2  
---- objective1 score  
---- objective2 score

我可以将所有能力按目标和等级分组为:
能力:: with('objectives.ratings')-> get();

我如何使教师成为第一级:教师-能力-目标-等级?

1 个答案:

答案 0 :(得分:0)

我能想到的一个捷径是,使用评分作为数据透视表,在教师和目标之间建立多对多关系。因此,教师与能力之间的距离要短一些。

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