我将 Eloquent 与 Laravel 4 的分页类一起使用。
问题:当URL中有一些GET参数时,例如:http://site.example/users?gender=female&body=hot
,产生的分页链接只包含page
参数,没有别的。
刀片模板
{{ $users->link() }}
有一个 ->append()
函数,但是当我们不知道有多少 GET 参数时,我们如何使用 append()
将其他 GET 参数包含在分页链接中,而不需要整块 if
代码弄乱了我们的刀片模板?
编辑:康纳对 Mehdi 的回答的评论是完成这项工作所必需的。感谢他们的澄清。
->appends()
可以接受一个数组作为参数,您可以传递 Input::except('page')
,这应该可以解决问题。
例子:
return view('manage/users', [
'users' => $users->appends(Input::except('page'))
]);
我认为您应该在 Laravel 5+ 版中使用此代码。此外,这不仅适用于参数 page
,还适用于任何其他参数:
$users->appends(request()->input())->links();
就个人而言,我尽量避免使用 Facades
。使用全局辅助函数代码更少,更优雅。
更新:
不要使用 Input
Facade,因为它在 Laravel v6+ 中已被弃用
except('page')
。
你可以使用
->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() }}
注意 Input::all()
,它将在您打开的每个页面中一次又一次地包含以前的 ?page=
值!
例如,如果您在 ?page=1
并打开下一页,它将打开 ?page=1&page=2
所以最后一个值页面将是您看到的页面!不是您想查看的页面
解决方案:使用 Input::except(array('page'))
Laravel 7.x 及更高版本为分页器添加了新方法:
->withQueryString()
所以你可以像这样使用它:
{{ $users->withQueryString()->links() }}
对于低于 7.x 的 laravel,请使用:
{{ $users->appends(request()->query())->links() }}
不是 append()
而是 appends()
所以,正确答案是:
{!! $records->appends(Input::except('page'))->links() !!}
拉拉维尔 5
视图必须包含以下内容:
{!! $myItems->appends(Input::except('page'))->render() !!}
使用此结构,保留所有输入参数,但页面
{!! $myItems->appends(Request::capture()->except('page'))->render() !!}
为什么?
1)您删除添加到请求中的所有内容
$request->request->add(['variable' => 123]);
2) 你不需要 $request 作为函数的输入参数
3)您正在排除“页面”
PS)它适用于 Laravel 5.1
将其包含在您的视图页面中
$users->appends(Input::except('page'))
对于刀片中 laravel 5 或更高版本的人:
{{ $table->appends(['id' => $something ])->links() }}
你可以得到通过的项目
$passed_item=$request->id;
测试它
dd($passed_item);
你必须得到 $something 价值
在 Laravel 7.x 中,你可以像这样使用它:
{{ $results->withQueryString()->links() }}
也传递页码进行分页。像这样的东西
$currentPg = 输入::get('page') ?输入::get('page') : '1'; $boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });
在分页后的控制器中添加 withQueryString() 如下所示
$post = Post::paginate(10)->withQueryString();
这里的许多解决方案都提到使用 Input
...
Input
已在 Laravel 6、7、8 中移除
请改用 Request
。
这是在我的 Laravel 8 项目中起作用的刀片语句:
{{$data->appends(Request::except('page'))->links()}}
其中 $data
是包含分页数据的 PHP 对象。
感谢在 this comment 中指出这一点的 Alexandre Danault。
不定期副业成功案例分享
appends
,notappend
。正确的链接类似于$query->appends($foo)->links();
$query->appends(Input::except('page'))->links();
效果更好。否则,当您单击页面时,页面变量不会更新。 Laravel 4.1.24。{!! $myItems->appends(Input::except('page'))->render() !!}