Условно добавьте предложение where к красноречивому запросу - PullRequest
1 голос
/ 02 июля 2019

У меня есть база данных товаров.Я разрешаю пользователям вводить поисковый термин и отображаю продукты, связанные с их поисковым термином.Я хочу добавить возможность для пользователя дополнительно фильтровать эти результаты по «полу» с помощью AJAX.Если пользователь выбирает пол в поле выбора, он отправляется в строку запроса URL.

вот мой код, отвечающий за обнаружение, если в строке запроса указан «пол».

$searchTerm = request('s');
$gender = request('gender');

$productsQuery = DB::table('products')
                ->where('title', 'LIKE', "%$searchTerm%");
if ($gender != "") {
    $productsQuery->where('gender', '=', "%$gender%");
}

$productsQuery->get(); 

Когда вызывается этот метод.Я получаю пустую коллекцию.

Ответы [ 3 ]

3 голосов
/ 02 июля 2019

Ваша идея и подход верны, но вы смешиваете LIKE и = запросов. % является подстановочным знаком, но его можно использовать только с LIKE.

Итак, если вы хотите использовать подстановочный знак и LIKE,

if(!empty($gender)) {
    $productsQuery->where('gender', 'LIKE', "%$gender%");
}

Или, если вы хотите сопоставить по точному тексту,

if(!empty($gender)) {
    $productsQuery->where('gender', $gender);
}

Ваш текущий код будет искать точное совпадение буквенной строки %male%, например.

Имейте в виду, что при использовании подстановочного знака male также будет соответствовать female (так как оба они содержат слово "мужской").

2 голосов
/ 02 июля 2019

На самом деле вы можете сделать это в одном запросе.Просто так:

$productsQuery = DB::table('products')
->where('title', 'LIKE', '%'.$searchTerm.'%')
->where(function($query) use ($gender){
     if($gender != ""){
        $query->where('gender', '=', $gender);
      }
})
->get();
2 голосов
/ 02 июля 2019

Вы должны использовать LIKE также во втором предложении where:

$productsQuery->where('gender', 'LIKE', "%{$gender%}");

EDITED

Если вам нужно найти точный пол, вы вообще не должны использовать подстановочные знаки.

$productsQuery->where('gender', '=', $gender);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...