【问题标题】:keep filter in URL when using laravel pagination使用 laravel 分页时在 URL 中保留过滤器
【发布时间】:2016-12-09 00:53:18
【问题描述】:

我想使用用户指定的过滤器执行查询,然后对结果进行分页。

在我的控制器中,我有:

public function index(Request $a)
{


    $queryJobCards = JobCardHead::query();

    //Add sorting

    $queryJobCards->orderBy('DateReqLatest','desc');

    //Add Conditions

    if($a->has('CusJobNum')) {
        $CusJobNum = $a -> get('CusJobNum');
        $queryJobCards->where('CusJobNum','=',$CusJobNum);
    }

    if($a->has('Status')) {
        $Status = $a->get('Status');
        $queryJobCards->where('Status','=',$Status);
    }

    // get data and Paginate

    $data = $queryJobCards->Paginate(20);

    return view('JobsByDate.JobsByDate', compact('data'));

}

如果我转到 /JobsByDate?CusJobNum=3224,那么我会得到过滤后的结果,但是当我尝试转到下一页时,我会丢失过滤器并且 url 变为 /JobsByDate?page=2。

我该如何解决这个问题?

【问题讨论】:

    标签: php pagination laravel-5.2


    【解决方案1】:

    在过滤页面,可以有

    {{ $posts->appends(request()->all())->links() }}
    

    【讨论】:

    • 你拯救了我的一天!
    【解决方案2】:

    您需要在插入分页链接时使用append 方法。

    {{ $users->appends(['CusJobNum' => 3224])->links() }}
    

    根据您的评论更新:
    只要存在过滤器,您的Input 外观中就会有一个数组['CusJobNum' => 3224 ]。在生成链接时,您可以做的是,将 Input::get('CusJobNum') 插入到 append 方法的参数中。这样,只有在过滤器存在时才会附加它。

    {{ $users->appends(Input::get('CusJobNum'))->links() }}
    

    【讨论】:

    • 如果没有指定过滤器怎么办?
    • 他们你会简单地使用{{ $users->links() }}
    • 我已经排序了,我事先不知道过滤器会是什么,可能没有过滤器但我做了'CusJobNum' => $CusJobNum 其中$CusJobNum 设置在控制器,如果没有过滤器,则设置为 null。感谢您的帮助
    • 哦,我刚刚看了你的更新!这样会更干净,谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-09-23
    • 2015-10-27
    • 1970-01-01
    • 2010-09-15
    • 2019-12-16
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多