使用laravel分页时,请在URL中保留筛选器


keep filter in URL when using laravel pagination

我想用用户指定的过滤器来形成一个查询,然后对结果进行分页。

在我的控制器中,我有:

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.

我该怎么解决这个问题?

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

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

根据您的评论更新:
无论何时过滤器出现,您的Input外观中都会有一个aray ['CusJobNum' => 3224 ]。生成链接时,可以在append方法的参数中插入Input::get('CusJobNum')。通过这种方式,只有在过滤器存在的情况下才会附加它。

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

在过滤器页面中,您可以使用

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