Фильтр цен от минимального до максимального. laravel

78
16 марта 2022, 22:30

Всем доброго дня! Не получается сделать фильтр от минимального до максимального значения. У меня есть контроллер в котором я сравниваю цену с введенными значениями в инпуты на view:

Контроллер

$postValues = Post::where(function($query)
{
    if (request()->has('min_value')) {
        request()->get('min_value');
    } else {
        $min_value = null;
    }
    if (request()->has('max_value')) {
        request()->get('max_value');
    } else {
        $max_price = null;
    }
    if(isset($min_value) && isset($max_value))
    {
        $query->where('price','>=',$min_value);
        $query->where('price','<=',$max_value);
    }
})->get()->toArray();
view()->share('postValues', $postValues);

View

<div class="block-title has-arrow sidebar-header">
  <form role="form" class="form-inline" action="{{ $fullUrlNoParams }}" method="GET">
    <div class="form-group col-sm-4 no-padding">
      <input type="text" placeholder="min year" id="min_value" name="min_value" class="form-control"
            value="{{request()->get('min_value')}}">
    </div>
    <div class="form-group col-sm-4 no-padding">
      <input type="text" placeholder="max year" id="max_value" name="max_value" class="form-control"
            value="{{request()->get('max_value')}}">
    </div>
    <button class="btn btn-default pull-right btn-block-xs" type="submit">{{ t('GO') }}</button>
  </form>
</div>

Ничего не работает. Я новенький и уверен, что-то не так сделал или вообще не так делаю. Подскажите в чем проблема.

Answer 1

Вы проверяете наличие цены, но забыли ее потом присвоить в переменные:

$min_value = request()->get('min_value');
$max_value = request()->get('max_value');

Код целиком:

$postValues = Post::where(function($query)
    {
        if (request()->has('min_value')) {
            $min_value = request()->get('min_value');
        } else {
            $min_value = null;
        }
        if (request()->has('max_value')) {
            $max_value = request()->get('max_value');
        } else {
            $max_price = null;
        }
        if(isset($min_value) && isset($max_value))
        {
            $query->where('price','>=',$min_value);
            $query->where('price','<=',$max_value);
        }
    })->get()->toArray();

А в целом, как вам уже подсказали в комментах, лучше через whereBetween

Answer 2

Попробуйте

    $postValues = Post::query();
      $min_value = null;
      $max_price = null;  
    if (request()->get('min_value')) {
       $min_value = request()->get('min_value');
    }
    if (request()->get('max_value')) {
       $max_price = request()->get('max_value');
    }
    if($min_value && $max_price) {
        $postValues = $postValues->whereBetween('price', [$min_value, $max_price])
    }
    $postValues = $postValues->get()->toArray();
    view()->share('postValues', $postValues);
READ ALSO
Как в Google Sheets API писать в разные диапазоны?

Как в Google Sheets API писать в разные диапазоны?

Пытаюсь разобраться в Google Sheets API на PHP 7В общем, как правильно заполнить range, чтобы получилось так?

61
Как понять логику?

Как понять логику?

Читал статью «почему не любят php»И там был пример, приводился этот код:

85
конкатенация строки и двух условий if

конкатенация строки и двух условий if

Есть 'строка' в конце которой стоит Тег <br> нужно сделать перенос строки при двух переменных, отображение которых зависит от условия if

231
Проблемы с кодировкой MySQL

Проблемы с кодировкой MySQL

Написал такой код для пангинации, но он почему выводит кракозябры вместо текстаКак это исправить?

103