首页 > 解决方案 > Laravel 5.8 本地查询范围与数据透视表,返回相关模型

问题描述

我与联系人Services具有多对多关系People,通过services_contacts数据透视表连接,我正在尝试在Service模型上创建本地范围查询以返回 primaryContacts():

public function scopePrimaryContacts($query)
{
    $pivot = $this->contacts()->getTable();

    return $query->whereHas('contacts', function ($q) use ($pivot) {
        return $q->where("{$pivot}.is_primary", true);
    });
}

这将返回服务,我需要它来返回与is_primary数据透视表本身相关的人员。我希望能够调用$this->primaryContacts我的Service模型,就像我可以调用$this->contacts以获取任何/所有联系人一样。有什么想法可以从这里开始吗?以下是模型contacts上的关系... Service

public function contacts()
{
    return $this->belongsToMany(Person::class, 'services_contacts', 'service_uuid', 'person_uuid')
        ->withPivot('is_primary', 'is_active', 'contact_type_uuid')
        ->withTimestamps();
}

在模型services上:Person

public function services()
{
    return $this->belongsToMany(Service::class, 'services_contacts', 'person_uuid', 'service_uuid');
}

标签: laravellaravel-5eloquentpivotlaravel-5.8

解决方案


我不会把它作为一个范围,我会做第二个关系函数,但有一些额外的参数。

服务模式

public function primaryContact() 
{
    return $this->belongsToMany(Person::class, 'services_contacts', 'service_uuid', 'person_uuid')
            ->wherePivot('is_primary', true)
            ->wherePivot('is_active', true);
}

推荐阅读