我正经历着最艰难的时光,我不确定问题是关系还是什么。我有一个“用户”表,该表与“实践”表具有多对多关系(通过数据透视表)。但是,诊所与“医生”表具有一对多的关系,其中一个诊所可以有很多医生,但是医生只能属于一个诊所。然后,我还需要在医生和“患者”表之间建立多对多的关系,我需要从中进行计数和按日期计数的查询。
当前,它设置为用户可以在实践上运行一个foreach循环,然后在$ practices-> doctor上运行,以查看他们拥有的医生。但这不是最佳选择,因为医生随后无法按字母顺序进行排序。有人可以帮助我弄清楚如何直接找医生,而无需其他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);
答案 0 :(得分:0)
您的方案没有预定义的雄辩关系。但是我们可以使用另一个关系来创建一个关系。
我相信您已经在“用户模型”中与“实践”在“实践模型”中与“医生”建立了联系。
image
您需要在“用户模型”中建立“医生”关系。
// 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;
}
答案 1 :(得分:0)
您可以通过“跳过” practices
表来创建直接关系:
class User extends Model {
public function doctors() {
return $this->belongsToMany(
Doctor::class,
'practice_user',
null,
'practice_id',
null,
'practice_id'
);
}
}