Внутренний где запрос в Laravel - PullRequest
0 голосов
/ 07 января 2019

Я не могу заставить это работать, возможно, я все еще не понимаю этого ясно.

//get the Schools of the local government selected
        $churchs = Church::with(['confirmed' => function($q){ $q->where('status', 1);}])
                         ->where('state_id', request('state'))->get();
        return response()->json(['churchs' => $churchs]);

У меня тоже есть эти отношения

 public function confirmed() {
    return $this->hasOne(Confirmed::class, 'church_id', 'id');
}

Это ограничение $q->where('status', 1) не вступает в силу при выполнении вышеуказанного запроса. Хотя ошибок нет, но я получаю список церквей, чей статус тоже 0, что не должно быть.

Мне нужно простое объяснение того, как это сделать, спасибо.

1 Ответ

0 голосов
/ 07 января 2019

with() только загружает отношения. Операторы условия внутри with() фильтруют только результаты отношений, но не базовой модели (таблица). Ваш запрос выглядит так: Возьмите все церкви и загрузите в них только подтвержденные status=1.

Чтобы отфильтровать результаты базовой таблицы по значению столбца отношения, вы должны использовать методы whereHas() или whereDoesntHave().

$churchs = Church::whereHas('confirmed', function($query){
        $query->where('status', 1);
    })
    ->where('state_id', request('state'))
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...