它是一个电子商务应用程序,其中包含从表中动态获取参数的过滤器。
“过滤器”表如下所示:
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中动态生成多选过滤器中创建动态查询吗?
提前致谢,
答案 0 :(得分:0)
除非价格以某种方式为负,否则你的$ min将始终为0 ......?我不完全明白问题所在。您可以动态链接查询,但这似乎是逻辑问题,而不是查询构建器问题?
根据评论进行编辑:
问题是$ budget&lt; $ min永远不会返回true,除非你的$预算在某种程度上是负面的。 1000&lt; 0 =&gt;将返回false,因此它永远不会将$ min设置为$ budget。所以你需要设置一个体面的$ min值。你可能想做的是:
$ min = $ request-&gt; input('budget',0);
这会将$ min分配给您的请求中的budget参数,但如果该参数不存在,则默认为0。