如何自动将查询字符串附加到 laravel 分页链接?
Posted
技术标签:
【中文标题】如何自动将查询字符串附加到 laravel 分页链接?【英文标题】:How to automatically append query string to laravel pagination links? 【发布时间】:2014-09-13 12:05:15 【问题描述】:我正在使用 Laravel 和 Ajax 调用对复选框单击进行搜索过滤。所以当我点击一个复选框时我会得到结果。我的查询如下:
$editors = User::with(['editor.credentials','editor.specialties','editor.ratings']);
$temp=$editors->whereHas('editor', function($q) use ($a_data)
$q->whereHas('specialties',function($sq) use($a_data)
$sq->whereIn('specialty',$a_data);
);
)->paginate(2);
这为我提供了我需要的所有数据。但是我应该如何获取分页链接?
$temp->setBaseUrl('editors');
$links = $temp->links()->render();
我目前正在执行此操作,并且使用 $links 作为对 ajax 调用的响应,我使用 $links 数据设置了分页。现在,我需要将查询附加到下一页,例如 page=2?query="something"。我不知道应该如何将剩余的查询结果链接附加到下一页链接。即我不知道 query="something" 部分应该包含什么。有人可以指导我。谢谢
【问题讨论】:
【参考方案1】:附加除实际页面、表单标记和您不想传递的内容之外的所有输入:
$paginatedCollection->appends($request->except(['page','_token']));
【讨论】:
【参考方案2】: $users->appends(Request::only(['filter','search']))->links()
【讨论】:
【参考方案3】:从 Laravel 7 开始,您可以在 Paginator
实例上调用 withQueryString()
方法。
引用自文档:
如果您希望将所有当前查询字符串值附加到分页链接,您可以使用 withQueryString 方法:
$users->withQueryString()->links()
请参阅“附加到分页链接”:https://laravel.com/docs/7.x/pagination#displaying-pagination-results
【讨论】:
您也可以将其直接应用于您的模型查询。User::paginate()->withQueryString()
可让您在视图中执行此操作: $users->links()
谢谢兄弟,这是最好的解决方案。【参考方案4】:
你可以在视图中使用请求助手
$users->appends(request()->query())->links()
【讨论】:
完美答案。谢谢【参考方案5】:在您显示分页的视图中...
$results->appends(Request::except('page'))->links()
appends 保留除“page”之外的查询字符串值。不确定它是否适用于 POST 请求
【讨论】:
【参考方案6】:受先前答案的启发,我最终将服务容器用于前端 + api 支持。
在您的AppServiceProvider@boot()
方法中:
$this->app->resolving(LengthAwarePaginator::class, function ($paginator)
return $paginator->appends(array_except(Input::query(), $paginator->getPageName()));
);
【讨论】:
值得注意的是,你最好同时绑定分页器类型,lenghaware 和 normal【参考方案7】: $users->appends($_GET)->links()
它将所有查询字符串参数附加到分页链接中
【讨论】:
基于此,我在视图中使用了请求助手: $users->appends(request()->query())->links()
或者更好 $posts->appends(request()->except('page'))->links()
@FosAvance 谢谢。这没有任何附加值。对我来说就像 Ehsan 代码一样工作。有什么区别??【参考方案8】:
对于目前最新版本的 Laravel (5.2),您可以只使用 Request 门面来检索查询字符串并将其传递给分页器的 appends() 方法
$input = Request::input();
$myModelsPaginator = App\Models\MyModel::paginate();
$myModelsPaginator->appends($input);
【讨论】:
【参考方案9】:查看@Arda 的答案,因为它是全球解决方案。您可以在下面找到如何手动操作。
在 Paginator 上使用 appends
:
$querystringArray = Input::only(['search','filter','order']); // sensible examples
// or:
$querystringArray = ['queryVar' => 'something', 'anotherVar' => 'something_else'];
$temp->appends($querystringArray);
【讨论】:
【参考方案10】:在您的应用程序中的任何位置添加它(例如 routes.php、filters.php 或任何自动加载的内容),无需编辑任何已经编写的分页代码。这可以完美地使用视图作曲家,并且您不需要知道任何查询字符串参数:
////////PAGINATION QUERY STRING APPEND
View::composer(Paginator::getViewName(), function($view)
$queryString = array_except(Input::query(), Paginator::getPageName());
$view->paginator->appends($queryString);
);
//////////////////
【讨论】:
routes.php 第 20 行中的 FatalErrorException:找不到类“Paginator” 此答案适用于 Laravel 4 @Tarzan,在 Laravel 5 中,类是 PSR-4 标准,因此您需要在前面添加 \ 字符。但我没有在 Laravel 5 中尝试过。 View::composer(\Paginator::getViewName(), function($view) $queryString = array_except(Input::query(), \Paginator::getPageName()); $view ->分页器->appends($queryString); );不工作 你使用的是哪个版本的 Laravel? @泰山 Laravel 5,你能建议我如何在我的控制器中获得localhost/search/Filipino菲律宾语,想要一个根据菲律宾语的过滤器以上是关于如何自动将查询字符串附加到 laravel 分页链接?的主要内容,如果未能解决你的问题,请参考以下文章