Laravel - 根据表单的结果更改查询

时间:2017-01-13 19:25:15

标签: php html mysql laravel

目前我在Laravel的SQL查询中苦苦挣扎。

我有一个包含6个下拉列表的表单,我通过get发送到图像控制器。根据我将发送给控制器的内容,查询应该更改。

如果a是"空" (value =" leer")这应该从查询中排除。

这是我的HTML:

UIPopoverController

我通过路线发送此表格

<form action="/filter" method="get">

                                                {{csrf_field()}}
                                                <div class="form-group">
                                                    <label for="brand">Brand</label>
                                                    <select class="form-control" id="brand" name="brand">
                                                        <option value="leer"></option>
                                                        @foreach($brands as $brand)

                                                            <option value="{{$brand->brand}}">{{$brand->brand}}</option>


                                                        @endforeach


                                                    </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="color">Color</label>
                                                    <select class="form-control" id="color" name="color">
                                                        <option value="leer"></option>

                                                        @foreach($colors as $color)

                                                            <option value="{{$color->color}}">{{$color->color}}</option>


                                                        @endforeach
                                                    </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="style">Style</label>
                                                    <select class="form-control" id="style" name="style">
                                                        <option value="leer"></option>
                                                        @foreach($styles as $style)

                                                            <option value="{{$style->style}}">{{$style->style}}</option>


                                                        @endforeach
                                                    </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="material">Material</label>
                                                    <select class="form-control" id="material" name="material">
                                                        <option value="leer"></option>
                                                        @foreach($materials as $material)

                                                            <option value="{{$material->material}}">{{$material->material}}</option>


                                                        @endforeach
                                                    </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="shape">Shape</label>
                                                    <select class="form-control" id="shape" name="shape">
                                                        <option value="leer"></option>
                                                        @foreach($shapes as $shape)

                                                            <option value="{{$shape->shape}}">{{$shape->shape}}</option>


                                                        @endforeach
                                                    </select>
                                                </div>
                                                <div class="form-group">
                                                    <label for="year">Year</label>
                                                    <select class="form-control" id="year" name="year">
                                                        <option value="leer"></option>
                                                        @foreach($years as $year)

                                                            <option value="{{$year->year}}">{{$year->year}}</option>


                                                        @endforeach

                                                    </select>
                                                </div>

                                                <input type="submit" class="btn" value="Filter">



                                                <button type="button" class="btn" data-dismiss="modal">Close
                                                </button>

                                            </form>

这是我的控制器函数,where子句应该是空的defaultif在表单中没有选择任何东西。如果您选择从品牌下拉列表和颜色下拉列表中选择somtehing,查询应该看起来像([[&#39;品牌&#39;,$品牌],[&#39;颜色&#39;,$ color] ]) - &GT;分页(12);

Route::get('/filter', 'ImagesController@filter');

有时它有效,但我认为它是偶然的,显然它不起作用。

我真的很感谢你的帮助。

非常感谢Lars。

1 个答案:

答案 0 :(得分:1)

你需要在where子句之后调用paginate。构建器对象上的分页创建一个LengthAwarePaginator对象。调用此paginator的地方会导致分页集合中的某个位置(通过魔术方法__call),这不是预期的响应。

尝试:

$imagesQuery = DB::table('images')->select('brand', 'color', 'style', 'material', 'shape', 'year', 'id', 'path', 'created_at')->where('year',$year);

        if ($brand == 'leer') {
            $imagesQuery->where('brand', '=', $brand);
        }

        if ($color == 'leer') {
            $imagesQuery->where('color', '=', $color);
        }

        if ($style == 'leer') {
            $imagesQuery->where('style', '=', $style);
        }

        if ($material == 'leer') {
            $imagesQuery->where('material', '=', $material);
        }

        if ($shape == 'leer') {
            $imagesQuery->where('shape', '=', $shape);
        }

        if ($year == 'leer') {
            $imagesQuery->where('year', '=', $year);
        }

$images = $imagesQuery->paginate(12);

return view('index')->with(compact('images'));