从多个选项和多参数过滤器生成复杂查询时发出问题

时间:2017-09-17 10:36:18

标签: forms laravel laravel-eloquent multichoiceitems

它是一个电子商务应用程序,其中包含从表中动态获取参数的过滤器。

“过滤器”表如下所示:

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 个答案:

答案 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。