При отправке пустых значений laravel красноречивый запрос не дает правильных результатов - PullRequest
0 голосов
/ 13 мая 2019

Я хочу создать фильтр с этими полями

Filters

если я не заполняю некоторые поля и отправляю нулевые значения, следующий запрос не работает.

$posts = Post::where('brand',$brand)
                 ->where('country',$country)
                 ->where('city',$city)
                 ->where('car_type',$car_type)
                 ->where('color','LIKE',$color)
                 ->whereBetween('year',[$from_year,$to_year])
                 ->whereBetween('milage',[$min_milage,$max_milage])
                 ->whereBetween('price',[$min_price,$max_price])
                 ->where('warranty',$warranty)
                 ->where('seller_type',$seller_type)
                 ->paginate(4);  

1 Ответ

3 голосов
/ 13 мая 2019

Это потому, что вы приказываете eloquent проверять NULL в базе данных, что приводит к следующему запросу:

WHERE brand IS NULL AND ... AND seller_type IS NULL 

Чтобы избежать этого, вы не должны применять фильтры к вашему запросу, если вы на самом деле не 'не хочу фильтровать.Фильтруйте только заданные значения следующим образом:

$posts = Post::all();

if( !is_null($brand) )
    $posts = $posts->where('brand', $brand)

// ...

if( !is_null($seller_type) )
    $posts = $posts->where('seller_type', $seller_type)

$posts = $posts->paginate(4); 

Примечание. Вы можете получить запрос, сгенерированный с помощью метода toSQL:

dd( $posts->toSql() );

Очень удобно для отладки.

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