如何通过这种关系来做到这一点,值得吗? (获得所有诊所部门)

时间:2018-04-22 13:07:48

标签: php laravel laravel-5 laravel-5.6

我有3张桌子:

诊所

clinics

部门

Departmens

clinics_in_departments

clinics_in_departments

使用查询生成器:

$department = ClinicsInDepartment::whereIn('clinic_id',[1,2,3])
            ->join('departments', 'clinics_in_departments.department_id', '=', 'departments.id')
            ->get();

如何通过这种关系来完成,是否值得?

2 个答案:

答案 0 :(得分:2)

如果您在“多对多”部分https://laravel.com/docs/5.6/eloquent-relationships#many-to-many查看Laravel的文档,已经在那里进行了解释。如果你打算继续使用Laravel,我建议你使用Eloquent的最佳实践。对其他开发人员来说,理解和阅读更容易。始终值得让您的产品尽力而为。它还提供了快速扩展和维护应用程序的可能性。

您需要做的就是在模型诊所中定义关系

// second, third and fourth parameter could also be optional
function departments(){
    return $this->belongsToMany('App\Clinics', 'clinics_in_departments', 'department_id', 'clinic_id');
}

要检索您可以使用的数据

$clinics = Clinics::with('departments')->get();
// this would hold a list of departments for each clinic

要获得完全相同的数据,请将查询扩展到此

$clinics = Clinics::with('departments')->whereIn('clinic_id',[1,2,3])->get();

因为它是多对多关系,您还可以为模型部门定义关系,并且与上面提到的完全相同。

答案 1 :(得分:1)

您可以在Clinics模型中定义属于多个关系,如下面的代码

 function departments(){
    return $this->belongsToMany('App\Clinics', 'clinics_in_departments');
 }