Laravel 5.8 локальная область запроса с сводной таблицей, возвращает связанные модели - PullRequest
0 голосов
/ 16 мая 2019

У меня есть Services, который имеет отношение многие-ко-многим к People в качестве контактов, связанных сводной таблицей services_contacts, и я пытаюсь создать локальный запрос области в модели Service, чтобыreturn 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 Ответ

2 голосов
/ 16 мая 2019

Я бы не стал делать это областью, я бы сделал вторую функцию отношения, но с некоторыми дополнительными параметрами.

Сервисная модель

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