Ошибка при создании сложного запроса из нескольких вариантов и фильтра нескольких параметров
Это приложение электронной коммерции, которое имеет фильтры, в которых параметры динамически извлекаются из таблицы.
Таблица "Фильтры" выглядит следующим образом:
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.