通过表单(GET)发送参数后的Laravel分页

时间:2017-01-18 20:08:35

标签: php html laravel pagination

目前,我真的很喜欢过滤和Laravel的分页。在http://snkrgllry.herokuapp.com/上,您可以尝试使用过滤器模式对图像进行排序,例如喜欢升序,如果您现在转到第二页,则表示找不到视图[2]。

我将通过表单过滤的参数发送到控制器,控制器进行查询并将所有这些数据发送回视图。到目前为止一切都很好,但第二页根本不起作用。

这是我在Blade上的代码

<div class="container">
    <div class="col-xs-12 row-centered">
        {{ $images->appends(request()->input())->links()}}
        </div>
</div>

这是控制器功能,请原谅我的第一个网络/ laravel项目的错误编程。

    public function filter(Request $request)


{
    $brand = $request->brand;
    $color = $request->color;
    $style = $request->style;
    $material = $request->material;
    $year = $request->year;
    $shape = $request->shape;
    $sorting = $request->sort;
    $page = $request->page;
    $user_id = $request->user_id;

    $sortingMethod = 'desc';
    $sortingParameter = 'created_At';

    //Abfrage wie sortiert werden soll

    if ($sorting == 'uploadDesc') {
        $sortingMethod = 'desc';
        $sortingParameter = 'created_At';
    } else if ($sorting == 'uploadAsc') {
        $sortingMethod = 'asc';
        $sortingParameter = 'created_At';
    } else if ($sorting == 'leer') {
        $sortingMethod = 'desc';
        $sortingParameter = 'created_At';
    } else if ($sorting == 'likesAsc') {
        $sortingParameter = 'count';
        $sortingMethod = 'asc';
    } else if ($sorting == 'likesDesc') {
        $sortingParameter = 'count';
        $sortingMethod = 'desc';
    }

    //$imagesQuery = DB::table('images')->select('brand', 'color', 'style', 'material', 'shape', 'year', 'id', 'path', 'created_at')->where('contest', 'true');
    $imagesQuery = DB::table('images')
        ->leftJoin('likes', 'images.id', '=', 'likes.image_id')
        ->select('images.*', DB::raw("count(likes.image_id) as count"))
        ->groupBy('images.id', 'images.brand', 'images.user_id', 'images.color', 'images.style', 'images.material', 'images.shape', 'images.year', 'images.desc', 'images.path', 'images.name', 'images.model', 'images.contest', 'images.remember_token', 'images.created_at', 'images.updated_at')
        ->orderBy($sortingParameter, $sortingMethod);


    $brands = DB::table('images')->select('brand')->groupBy('brand')->get();
    $colors = DB::table('images')->select('color')->groupBy('color')->get();
    $styles = DB::table('images')->select('style')->groupBy('style')->get();
    $materials = DB::table('images')->select('material')->groupBy('material')->get();
    $years = DB::table('images')->select('year')->groupBy('year')->get();
    $shapes = DB::table('images')->select('shape')->groupBy('shape')->get();


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

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

    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);
    }


    if ($page == 'contest') {
        $imagesQuery->where('images.contest', '=', 'true');

        $brands->where('contest', 'true');
        $colors->where('contest', 'true');
        $styles->where('contest', 'true');
        $materials->where('contest', 'true');
        $years->where('contest', 'true');
        $shapes->where('contest', 'true');
    }

    if ($page == 'profile') {
        $imagesQuery->where('images.user_id', '=', $user_id);
        $user = User::find($user_id);
    }

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

    return view($page)->with(compact('images', 'brands', 'colors', 'styles', 'materials', 'years', 'shapes', 'user'));

}

如果我提交过滤表单,这就是我的路线。

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

您方是否有任何建议如何解决此问题。我读过很多关于它的内容,但我仍然没有完成它。

我真的很感谢你的帮助!

最好的问候Lars

3 个答案:

答案 0 :(得分:0)

您将页面作为参数传递:

return view($page)

所以它是&#39; 2&#39;第二页。只需传递模板名称,而不是页码。对传递的page变量使用另一个名称,它用于分页。

答案 1 :(得分:0)

漂亮的鞋子! :)

问题在于您的前端代码。当您点击下一页时,page的请求参数为2而不是index

以下是HTML代码:<a href="http://snkrgllry.herokuapp.com/indexFilter?_token=m2L6LXgKELcc66JsDgxFQaF6WxhfXfep22LC0PXk&amp;brand=leer&amp;color=leer&amp;style=leer&amp;material=leer&amp;shape=leer&amp;year=leer&amp;sort=likesAsc&amp;page=2">2</a>

答案 2 :(得分:0)

非常感谢我直到明天才能解决这个问题(项目对我们大学教授的贡献),但现在我知道我的错误并且我“修复”它以便它能为我解决。我会尽力解决你的解决方案的问题!!