【问题标题】:Laravel many to many relationship with eagerLaravel 与渴望的多对多关系
【发布时间】:2021-06-04 07:00:25
【问题描述】:

我有以下表格:-

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');
        }]);

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

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

【问题讨论】:

    标签: php laravel laravel-5 eloquent many-to-many


    【解决方案1】:

    通过在 ReportFacility Model 中添加以下行来解决:-

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

    并将雄辩的查询更改为:-

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 调用模型 [App\Report] 上的未定义关系 [observations]。
      • 我认为当我按照你的解释分离关系时,观察结果将直接加载到报告下,我希望它作为数组加载,每个设施都有观察数组​​
      • 抱歉,我没有看到报告模型上没有定义观察结果。
      • 尝试点符号,如->load('facilities.observations')
      • 我试过了,它返回相同,它返回所有报告中与该设施相关的所有观察结果
      猜你喜欢
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2016-09-18
      • 2014-02-24
      • 1970-01-01
      • 2014-04-19
      • 2014-11-29
      • 2016-05-31
      相关资源
      最近更新 更多