0

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

“过滤器”表如下所示:

编号 | 集团 | 标签 | 值
----+----------+---------+------------- ---

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 中动态生成的多选过滤器创建动态查询吗?

提前致谢,

4

1 回答 1

0

除非价格以某种方式为负,否则您的 $min 将始终为 0...?我不完全明白问题是什么。您可以动态地将查询链接在一起,但这似乎是逻辑问题,而不是查询构建器问题?

根据评论编辑:

问题是 $budget < $min 永远不会返回 true,除非你的 $budget 是负数。1000 < 0 => 将返回 false,因此它永远不会将 $min 设置为 $budget。所以你需要设置一个不错的 $min 值。你可能想做的是:

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

这会将 $min 分配给您请求中的预算参数,但如果该参数不存在,它将默认为 0。

于 2017-09-17T10:57:46.823 回答