Laravel通过多对多关系引用一对多表

Laravel通过多对多关系引用一对多表,laravel,eloquent,Laravel,Eloquent,我正经历着最艰难的时刻,我不确定问题是关系还是什么。我有一个“用户”表,它与“实践”表有多对多关系(通过透视表)。然而,机构与“医生”表有一对多的关系,其中一个机构可以有多个医生,但一个医生只能属于一个机构。然后,我在医生和“患者”表之间也有一个多对多的关系,我需要运行计数和按日期计数之类的查询 目前,它被设置为用户可以通过在practices上运行foreach循环,然后在$practices->doctors上运行foreach循环来查看他们的医生。但这并不是最优的,因为医生不能按字母顺序排

我正经历着最艰难的时刻,我不确定问题是关系还是什么。我有一个“用户”表,它与“实践”表有多对多关系(通过透视表)。然而,机构与“医生”表有一对多的关系,其中一个机构可以有多个医生,但一个医生只能属于一个机构。然后,我在医生和“患者”表之间也有一个多对多的关系,我需要运行计数和按日期计数之类的查询

目前,它被设置为用户可以通过在practices上运行foreach循环,然后在$practices->doctors上运行foreach循环来查看他们的医生。但这并不是最优的,因为医生不能按字母顺序排序。有没有人能帮我弄清楚,我如何在不需要额外的foreach循环的情况下直接推荐医生

这是我当前的代码。提前谢谢

dashboard.blade.php

@foreach ($practices as $practice)
    @foreach ($practice->doctors as $doctor)
        Doctor Name:   {{$doctor->full_name}}
        Patient Count: {{$doctor->patients()->count()}}
    @endforeach
@endforeach
DashboardController.php

$practices = User::find(Auth::user()->id)->practices();
return view('dashboard')->withPractices($practices);

您的场景没有预定义的雄辩关系。但我们可以用另一种关系建立一种关系

我相信您已经在“用户模型”中创建了与“实践”的关系,在“实践模型”中创建了与“医生”的关系

// in User Model
public function practices()
{
    return $this->belongsToMany(Practices::class);
}

// in Practice Model
public funcion doctors()
{
    return $this->hasMany(Doctor::class);
}
您需要在“用户模型”中建立“医生”关系

// in User Model
public function doctors()
    $this->load(['practices.doctors' => function($query) use (&$relation) {
        $relation = $query;
    }]);

    return $relation;
}
现在你可以为这样的“用户”找“医生”

$doctors = User::find(Auth::user()->id)->doctors;

您可以通过“跳过”
practices
表来创建直接关系:

类用户扩展模型{
公共职能医生(){
返回$this->belongtomany(
医生:同学们,
“实践用户”,
无效的
“实习医生”,
无效的
“练习id”
);
}
}