139

我将 Eloquent 与 Laravel 4 的分页类一起使用。

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

刀片模板

{{ $users->link() }}

有一个->append()函数可以解决这个问题,但是当我们不知道有多少 GET 参数时,我们如何append()在分页链接中包含其他 GET 参数,而不用一大块if代码弄乱我们的刀片模板?

4

13 回答 13

139

编辑:康纳对 Mehdi 的回答的评论是完成这项工作所必需的。感谢他们的澄清。

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

例子:

return view('manage/users', [
    'users' => $users->appends(Input::except('page'))
]);
于 2013-06-18T01:37:43.280 回答
137

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

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

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

更新:

不要使用InputFacade,因为它在 Laravel v6+ 中已被弃用

于 2016-07-24T20:32:50.230 回答
65

你可以使用

->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() }}
于 2017-11-24T13:32:36.143 回答
41

请注意,它会在您打开的每个页面中一次又一次地Input::all()包含以前的值! 例如,如果您在其中并打开下一页,它将打开所以最后一个值页面将是您看到的页面!不是你想看的页面?page=
?page=1?page=1&page=2

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

于 2013-11-19T16:39:15.857 回答
29

Not append()but appends() So,正确答案是:

{!! $records->appends(Input::except('page'))->links() !!}
于 2014-11-25T07:16:21.787 回答
26

Laravel 7.x 及更高版本为分页器添加了新方法:

->withQueryString()

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

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

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

{{ $users->appends(request()->query())->links() }}
于 2020-07-30T10:06:58.833 回答
11

拉拉维尔 5

视图必须包含以下内容:

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

于 2015-10-11T23:00:52.753 回答
5

使用此结构,保留所有输入参数,但页面

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

为什么?

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

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

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

3)您正在排除“页面”

PS)它适用于 Laravel 5.1

于 2016-09-15T03:01:17.247 回答
4

将其包含在您的视图页面中

 $users->appends(Input::except('page'))
于 2017-12-11T05:48:24.440 回答
4

对于刀片中 laravel 5 或更高版本的人:

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

你可以得到通过的项目

$passed_item=$request->id;

测试它

dd($passed_item);

你必须得到 $something 价值

于 2018-08-13T19:24:22.443 回答
1

在 Laravel 7.x 中,你可以像这样使用它:

{{ $results->withQueryString()->links() }}
于 2020-11-30T07:39:00.373 回答
0

也传递页码进行分页。像这样的东西

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

于 2017-07-05T09:50:46.410 回答
-1

这里的许多解决方案都提到使用Input...

Input已在 Laravel 6、7、8 中删除

改为使用Request

这是在我的 Laravel 8 项目中起作用的刀片语句:

{{$data->appends(Request::except('page'))->links()}}

$data包含分页数据的 PHP 对象在哪里。

感谢Alexandre Danault在此评论中指出了这一点。

于 2021-11-20T19:15:14.273 回答