Laravel Pagination链接不包括其他GET参数

Nyx*_*nyx 84 pagination laravel eloquent blade laravel-4

我和Laravel 4的Pagination课一起使用Eloquent.

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

刀片模板

{{ $users->link() }}
Run Code Online (Sandbox Code Playgroud)

有一个->append()功能,但是当我们不知道有多少GET参数时,我们怎样才能append()在分页链接中包含其他GET参数而不if会让我们的刀片模板搞乱一大堆代码?

Ale*_*ult 109

编辑:Connor对Mehdi的答案的评论是必要的.感谢他们的澄清.

->appends()可以接受一个数组作为参数,你可以通过Input::except('page'),这应该做的伎俩.

例:

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

  • 只是要注意其他Google员工这样做 - 它现在是复数`appends`,**而不是**`append`.正确的链接就像`$ query-> appends($ foo) - > links();` (35认同)
  • 我发现`$ query->追加(Input :: except('page')) - > links();`工作得更好.否则,单击页面时页面变量不会更新.Laravel 4.1.24. (5认同)
  • LARAVEL 5:`{!! $ myItems-> appends(Input :: except('page')) - > render()!!}` (2认同)
  • 在laravel 5.2中,您应该使用Request而不是Input (2认同)

Has*_*imi 81

我认为你应该在Laracasts提到的Laravel 5中使用这个代码.此外,这不仅适用于参数page,还适用于任何其他参数:

$users->appends(request()->input())->links();
Run Code Online (Sandbox Code Playgroud)

我个人尽量避免Facades尽可能多地使用.使用全局辅助函数代码更少,更优雅.

  • 这适用于laravel 5.6,使用已接受的答案解决方案对我造成了错误. (2认同)
  • 另外,我注意到您不需要在此解决方案中使用`except('page')`。 (2认同)
  • 它也可以在Laravel 6.0中使用! (2认同)
  • 这在 Laravel 8 中有效,是更有用和简单的解决方案。 (2认同)

Meh*_*oni 40

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

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


Bal*_*ald 28

不是append(),appends() 所以,正确答案是:

{!! $records->appends(Input::except('page'))->links() !!}
Run Code Online (Sandbox Code Playgroud)


Ale*_*ich 27

你可以用

->appends(request()->query())
Run Code Online (Sandbox Code Playgroud)

控制器中的示例:

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

return view('users.index', compact('users'));
Run Code Online (Sandbox Code Playgroud)

视图中的示例:

{{ $users->appends(request()->query())->links() }}
Run Code Online (Sandbox Code Playgroud)

  • 这是Mohamed Said(Laravel员工)建议的方式,请参阅:https://github.com/laravel/framework/issues/19441#issuecomment-305526428 (2认同)
  • 为我工作。+1 (2认同)

Shr*_*esh 19

Laravel 7.x 及以上版本为 paginator 添加了新方法:

->withQueryString()
Run Code Online (Sandbox Code Playgroud)

所以你可以像这样使用它:

{{ $users->withQueryString()->links() }}
Run Code Online (Sandbox Code Playgroud)

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

{{ $users->appends(request()->query())->links() }}
Run Code Online (Sandbox Code Playgroud)

  • 哇,仅仅一行就太神奇了。我错过了文档。虽然7.x是爱情 (2认同)

eca*_*rol 11

拉瓦尔5

视图必须包含以下内容:

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


Mir*_*ker 11

在分页后的控制器中添加 withQueryString() 如下所示

$post = Post::paginate(10)->withQueryString();
Run Code Online (Sandbox Code Playgroud)


Yev*_*yev 5

使用这种结构,保持所有输入参数但页面

{!! $myItems->appends(Request::capture()->except('page'))->render() !!}
Run Code Online (Sandbox Code Playgroud)

为什么?

1)你删除所有添加到请求的内容

  $request->request->add(['variable' => 123]);
Run Code Online (Sandbox Code Playgroud)

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

3)你排除"页面"

PS),它适用于Laravel 5.1