繁体   English   中英

Laravel 与渴望的多对多关系

[英]Laravel many to many relationship with eager

我有以下表格: -

Table: facilities

Columns:

id bigint(20) UN AI PK 
name varchar(255) 


Table: reports

Columns:

id bigint(20) UN AI PK 
number varchar(20) 
visit_date date 
type varchar(255) 
user_id bigint(20) UN 

Table: observations

Columns:

id bigint(20) UN AI PK 
observation longtext 
recommendation longtext 
priority varchar(255) 
status bigint(20) UN 
report_facility_id bigint(20) UN

Table: report_facility

Columns:

id bigint(20) UN AI PK 
facility_id bigint(20) UN 
report_id bigint(20) UN

楷模:-

class Facility extends Model
{
 
    public function reports()
    {
        return $this->belongsToMany('App\Report');
    }

   
}

class Report extends Model
{

    public function facilities()
    {
        return $this->belongsToMany('App\Facility','report_facility','report_id','facility_id');
    }
   
}

class ReportFacility extends Model
{

    public function observations()
    {
        return $this->hasMany('App\Observation');
    }

    public function visit_details()
    {
        return $this->hasMany('App\VisitDetail');
    }

    public function facility()
    {
        return $this->belongsTo('App\Facility');
        
    }

    public function report()
    {
        return $this->belongsTo('App\Report');
    }
}

关系是每个(报告)有一个或多个(设施),每个(设施)有一个或多个(观察)。

这就是我现在正在使用的

Report::where('number',$number)->first()
        ->load(['facilities' => function($q) {
            $q->with('observations');
        }]);

以上返回(设施)并加载与该设施相关的所有观察结果,而不是仅加载与该报告相关的观察结果。

什么是正确的 eloquent 查询,用于将所有报告及其设施加载到 DB 上,并加载与为该报告编写的每个设施相关的观察结果。

分离load()方法调用中的关系。

Report::where('number',$number)->first()
        ->load('facilities', 'observations');

通过将以下行添加到 ReportFacility Model 来解决:-

public function visit_details()
    {
        return $this->hasMany('App\VisitDetail');
    }

并将 eloquent 查询更改为:-

Report::where('number',$number)->first()
        ->load('report_facilities.observations');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM