Ошибка при создании сложного запроса из нескольких вариантов и фильтра нескольких параметров

Это приложение электронной коммерции, которое имеет фильтры, в которых параметры динамически извлекаются из таблицы.

Таблица "Фильтры" выглядит следующим образом:

id | группа | этикетка | значение
---- + ---------- + ------------------- + -------------- -

12 | крайний срок | От 1 до 3 дней | 1 И 3
14 | бюджет | Любой | 0
15 | бюджет | Менее 1000 | 1,1000
16 | бюджет | От 1000 до 10000 | 1000, 10000
22 | местоположение | Любой | 0
23 | местоположение | Нью Йорк | Нью-Йорк
24 | местоположение | Калифорния | Калифорния
25 | местоположение | Алабама | Алабама

Одним из параметров среди многих является: "Бюджет" и опции флажка:

Все

От 1000 до 9999

От 10000 до 99999

От 100000 до 999999

Пользователи могут проверить несколько вариантов здесь.

Я пытаюсь построить поисковые запросы динамически из этого фильтра: (см. Здесь https://m.dotdev.co/writing-advanced-eloquent-search-query-filters-de8b6c2598db)

Посмотреть файл для фильтров:

@foreach ($groups as $group => $filters)
                <div class="panel panel-default">
                    <b>{{ $group }}</b>
                    @foreach($filters as $filter)
                        <div id="collapseOne1" class="panel-collapse collapse in">
                            <div class="panel-body">
                                <div class="checkbox">
                                    <label><input class="
                                    <?php if ($filter->value == '0') { ?>
                                            {{ $filter->group }}
                                    <?php } else { ?>
                                                {{ $filter->group."Child" }}
                                    <?php }?>" type="checkbox" name="{{ $filter->group }}" value="{{ $filter->value }}">{{ $filter->label }}</label>
                                </div>
                            </div>
                        </div>
                    @endforeach
                </div>
       @endforeach

Контроллер имеет:

$requests = $requests->newQuery();
if ($request->has('budget')) {
        foreach (explode(',',$request->budget) as $budget) {
            $min = 0;
            $max = 1;
            if($budget < $min){
                $min = $budget;
            }
            if($budget > $max){
                $max = $budget;
            }
        }
            $requests->whereBetween('budget',[$min, $max]);
        }
$requests = $requests->paginate(5);
...

Вышеприведенный код, похоже, не работает, так как он всегда устанавливает min = 0. Может кто-нибудь сказать, как я могу создать динамический запрос из динамически генерируемых фильтров с множественным выбором в Laravel?

Заранее спасибо,

1 ответ

Если цена не будет отрицательной, ваш $ min всегда будет 0...? Я не до конца понимаю, в чем проблема. Вы можете динамически связывать друг с другом запросы, но это кажется логической проблемой, а не проблемой конструктора запросов?

Редактировать на основе комментария:

Проблема в том, что $ budget <$ min никогда не вернет true, если ваш $ бюджет не имеет отрицательного значения. 1000 <0 => вернет false, поэтому никогда не будет устанавливать $ min в $ budget. Так что вам нужно установить приличное значение $ min. Что вы можете сделать, это:

$ min = $ request-> input ('budget', 0);

Это назначит $ min для параметра бюджета в вашем запросе, но если этот параметр не существует, по умолчанию он будет равен 0.

Другие вопросы по тегам