Я столкнулся с логической ошибкой при извлечении данных из красноречивых отношений laravel - PullRequest
1 голос
/ 12 июля 2019

У меня есть две модели Client и Group.

Это много ко многим отношениям, когда клиент принадлежит ко многим группам, а группы имеют более одного клиента. Я хочу получить всех клиентов, которые еще не входят в группу, и передать их в представление.

Групповая модель:

public function clients() {
        return $this->belongsToMany('App\Models\Client', 'client_group', 'group_id', 'client_id');
    }

Модель клиента:

public function documents() {
        return $this->belongsToMany('App\Models\Document', 'client_document', 'client_id', 'document_id');
    }

GroupsController.php

public function edit($id)
    {
        $group = Group::find($id);
        $clients = Client::all()->where('user_id', Auth::user()->id);
        return view('backend.groups.edit', compact('group', 'id', 'clients'));
    }

1 Ответ

1 голос
/ 12 июля 2019

Если я правильно понимаю, вы хотите клиентов, которые не являются частью группы.По сути, вам необходимо запросить отсутствие отношений:

$clients = App\Client::doesntHave('groups')->get();

Если вы хотите иметь возможность добавлять дополнительные выражения where:

use Illuminate\Database\Eloquent\Builder;

...

$clients = App\Client::whereDoesntHave('groups', function (Builder $query) {
    $query->where('active', '=', true);
})->get();

Для получения дополнительной информации см. Запрос отношений

...