Laravel 5.8带有数据透视表的本地查询范围,返回相关模型

时间:2019-05-16 16:50:11

标签: laravel laravel-5 eloquent pivot 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');
}

1 个答案:

答案 0 :(得分:2)

我不会将其作为范围,我将创建第二个关系函数,但要添加一些其他参数。

服务模型

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