如何自动将查询字符串附加到 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 分页链接?的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.2 分页链接中添加随机字符

附加到 Laravel 中的分页链接 URL

如何从 laravel 分页的第一页中删除查询字符串页面?

laravel 转到页面分页

如何在使用 laravel 迁移插入 db 时将字符串附加到给定的输入?

如何构建 Laravel 正则表达式查询,包括分页