laravel Показать только связанные данные в поисковом фильтре - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь создать поисковый фильтр:

if ($request->has('street')) {
    $streets->where('name', 'like', '%'.$request->street.'%');
}

if ($request->has('house')) {
    $streets->whereHas('properties', function ($query) use ($request) {
        $query->where('house_number', $request->house);
    });
}

return $streets->get();

В настоящее время он получает данные street.Я хочу сделать что-то вроде этого ?street=b-34&house=21 и отобразить данные house.

В настоящее время я получаю только данные street.

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

Похоже, ваши проблемы будут решаться каждым разработчиком Laravel за один день.Вы забыли вернуть запрос исходному конструктору.

У вас есть:

$streets->where('name', 'like', '%'. request('street') .'%');

, когда вы должны иметь:

$streets = $streets->where('name', 'like', '%'. request('street') .'%');

Вы объединяете методы в цепочку, поэтому вы должны получить исходный конструктор запросов

РЕДАКТИРОВАТЬ На основе комментариев: Кроме того, что вы не ответили на запрос, как я уже говорил выше, вы используете whereHas, как @thisiskelvin указал в его ответе.

Вы должны использовать

if (request()->has('street')) {
    $streets = $streets->where('name', 'like', '%'. request('street') .'%');
}

if (request()->has('house')) {
    $streets = $streets->with(['properties' => function ($query) {
        $query->where('house_number', request('house'));
    }]);
}

return $streets->get();
0 голосов
/ 21 марта 2019

Этого можно добиться, используя красноречивый метод ->with().Если запрос имеет house запрос, он вернет все properties, где house_number равно запрашиваемому номеру дома.После того, как найден, прикрепится к возвращенным результатам:

if (request()->has('street')) {
    $streets = $streets->where('name', 'like', '%'. request('street') .'%');
}

if (request()->has('house')) {
    $streets = $streets->with(['properties' => function ($query) {
        $query->where('house_number', request('house'));
    }]);
}

return $streets->get();

Примечание: Я изменил $request, чтобы использовать помощник request().

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