[英]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.