Laravel Eloquent - построение запроса «где нет» с отношением - PullRequest
0 голосов
/ 25 июня 2018

У меня 5 строк базы данных с одинаковыми client_id, 3 помечены completed, Yes.

Этот код выводит 3 результата, как и ожидалось:

$indGoal = $client->indGoal()->where('completed','=','Yes')->get();

Этот код не дает результатов: я ожидаю 2.

$indGoal = $client->indGoal()->where('completed','!=','Yes')->get();

Этот вопрос предлагает добавить ->orWhereNull('completed') - что работает, но игнорирует отношение client_id. Запрос выводит все не Yes результаты, независимо от $client

Модель моего клиента для справки:

public function indGoal()
{
    return $this->hasMany('App\Models\IndGoal');
}

1 Ответ

0 голосов
/ 25 июня 2018

Вы должны сгруппировать orWhere фильтры в обратном вызове, чтобы они не мешали существующим фильтрам.

$indGoal = $client->indGoal()
    ->where(function ($query) {
        $query->orWhere('completed', '!=', 'yes')
            ->orWhereNull('completed');
    })
    ->get();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...