首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel多对多关系与渴望

Laravel多对多关系与渴望
EN

Stack Overflow用户
提问于 2021-03-05 23:25:17
回答 2查看 38关注 0票数 1

我有以下各表:

代码语言:javascript
复制
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

型号:-

代码语言:javascript
复制
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');
    }
}

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

这就是我现在正在使用的

代码语言:javascript
复制
Report::where('number',$number)->first()
        ->load(['facilities' => function($q) {
            $q->with('observations');
        }]);

上面的返回( facility )加载了与该工具相关的所有观察值,而不是仅加载与该报告相关的观察值。

什么是合适的有说服力的查询,用于加载DB上的所有报告及其工具,并加载与为该报告编写的每个工具相关的观察值。

EN

回答 2

Stack Overflow用户

发布于 2021-03-05 23:45:00

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

代码语言:javascript
复制
Report::where('number',$number)->first()
        ->load('facilities', 'observations');
票数 0
EN

Stack Overflow用户

发布于 2021-03-06 04:21:25

通过将以下行添加到ReportFacility模型解决:-

代码语言:javascript
复制
public function visit_details()
    {
        return $this->hasMany('App\VisitDetail');
    }

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

代码语言:javascript
复制
Report::where('number',$number)->first()
        ->load('report_facilities.observations');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66495219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档