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

时间:2018-09-26 20:38:16

标签: laravel eloquent

我正经历着最艰难的时光,我不确定问题是关系还是什么。我有一个“用户”表,该表与“实践”表具有多对多关系(通过数据透视表)。但是,诊所与“医生”表具有一对多的关系,其中一个诊所可以有很多医生,但是医生只能属于一个诊所。然后,我还需要在医生和“患者”表之间建立多对多的关系,我需要从中进行计数和按日期计数的查询。

当前,它设置为用户可以在实践上运行一个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);

2 个答案:

答案 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'
        );
    }
}
相关问题