Laravel分页链接不包含其他GET参数


102

我正在将Eloquent和Laravel 4的Pagination类一起使用。

问题: URL中有一些GET参数时,例如:http://site.com/users?gender=female&body=hot,生成的分页链接仅包含该page参数,而没有其他内容。

刀片模板

{{ $users->link() }}

有一个->append()功能,但是当我们不知道有多少个GET参数时,我们如何使用append()它在分页链接中包括其他GET参数,而不会导致一大堆if代码弄乱刀片模板?

Answers:


121

编辑:康纳的评论与梅赫迪的答案是使这项工作所必需的。感谢双方的澄清。

->appends()可以接受数组作为参数,可以传递Input::except('page'),这可以解决问题。

例:

return view('manage/users', [
    'users' => $users->appends(Input::except('page'))
]);

37
只是要注意的到来这种方式与其他Google员工-这是现在多appends没有 append。正确的链接应类似于$query->appends($foo)->links();
Connor Peet 2013年

6
我发现$query->appends(Input::except('page'))->links();效果更好。否则,单击页面时页面变量不会更新。Laravel 4.1.24。
bitlather 2014年

...然后我向下滚动以查看Mehdi的解决方案。
bitlather 2014年

2
拉拉夫5: {!! $myItems->appends(Input::except('page'))->render() !!}
ecairol

2
在laravel 5.2中,您应该使用Request而不是Input
Christophvh

104

我认为您应该在Laravel 5中使用此代码。这不仅适用于参数,page而且适用于任何其他参数:

$users->appends(request()->input())->links();

就个人而言,我尽量避免使用Facades太多。使用全局帮助器函数的代码更少,更优雅。

更新:

请勿使用InputFacade,因为Laravel v6 +已弃用


2
这适用于laravel 5.6,使用可接受的答案解决方案对我造成了错误。
穆罕默德·阿齐兹

1
我还在5.3项目上成功实现了这一点;我也更喜欢这种简单的方法
kjones

3
另外,我注意到您不需要except('page')与此解决方案一起使用。
BakerStreetSystems

1
很有帮助。感谢
Viraj Amarasinghe

40

要注意Input::all(),这将包括以前?page=在每次打开页面连连值!
例如,如果您进入?page=1并打开下一页,则它将打开,?page=1&page=2
因此最后一个值页面将是您看到的页面!不是您要查看的页面

解决方案:使用 Input::except(array('page'))


39

你可以用

->appends(request()->query())

控制器中的示例:

$users = User::search()->order()->with('type:id,name')
    ->paginate(30)
    ->appends(request()->query());

return view('users.index', compact('users'));

视图中的示例:

{{ $users->appends(request()->query())->links() }}

3
这是Mohamed Said(Laravel员工)建议的方法,请参见:github.com/laravel/framework/issues/…–
Roy

1
我认为这是最好的答案,因为@roy说了什么+更好的例子。它也有in控制器示例+视图示例。
麦基'18

2
为我工作。+1
Manoj Kumar

1
这是最好的解决方案,对我也很有效
Jithin

28

不是append(),但appends() 因此,正确的答案是:

{!! $records->appends(Input::except('page'))->links() !!}

11

拉拉夫5

该视图必须包含以下内容:

{!! $myItems->appends(Input::except('page'))->render() !!}


5

使用此构造,保留除页面之外的所有输入参数

{!! $myItems->appends(Request::capture()->except('page'))->render() !!}

为什么?

1)您像这样剥离所有添加到请求的内容

  $request->request->add(['variable' => 123]);

2)您不需要$ request作为函数的输入参数

3)您不包含“页面”

PS),并且适用于Laravel 5.1



4

对于谁在laravel 5或以上刀片中的一个:

{{ $table->appends(['id' => $something ])->links() }}

你可以通过传递的项目

$passed_item=$request->id;

用它测试

dd($passed_item);

您必须获得价值的东西


1

Laravel 7.x为分页器添加了新方法:

->withQueryString()

因此,您可以像这样使用它:

{{ $users->withQueryString()->links() }}

对于低于7.x的laravel,请使用:

{{ $users->appends(request()->query())->links() }}

0

同时传递页码以进行分页。像这样的东西

$currentPg = Input::get('page') ? Input::get('page') : '1';
    $boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.