如何自动将查询字符串附加到laravel分页链接?

use*_*888 23 pagination laravel-4

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

这给了我所需的所有数据.但是我应该如何获得分页链接?

    $temp->setBaseUrl('editors');
    $links = $temp->links()->render();
Run Code Online (Sandbox Code Playgroud)

我目前正在做这个和我发送的$ links作为响应ajax调用,我设置了$ link数据的分页.现在,我需要将查询附加到下一页,如page = 2?query ="something".我不知道如何将剩余的查询结果链接附加到下一页链接.即我不知道查询中应该出现什么="某事"部分.有人可以指导我.谢谢

Dau*_*han 84

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

它会将所有查询字符串参数附加到分页链接中

  • 基于此,我在视图中使用了请求助手:`{{$ users-> appends(request() - > query()) - > links()}}` (15认同)
  • 或者更好的`{{ $posts->appends(request()->except('page'))->links() }}` (4认同)

Ste*_*ütt 18

从 Laravel 7 开始,您可以withQueryString()在您的Paginator实例上调用该方法。

从文档中引用:

如果您希望将所有当前查询字符串值附加到分页链接,您可以使用 withQueryString 方法:

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

请参阅“附加到分页链接”:https : //laravel.com/docs/7.x/pagination#displaying-pagination-results

  • 您还可以将其直接应用于模型查询。`User::paginate()->withQueryString()` 允许您在视图中执行此操作:`{{ $users->links() }}` (2认同)

Jar*_*zyk 17

检查@Arda的答案,因为它是全球解决方案.您可以在下面找到如何手动完成的操作.

appends在Paginator上使用:

$querystringArray = Input::only(['search','filter','order']); // sensible examples

// or:
$querystringArray = ['queryVar' => 'something', 'anotherVar' => 'something_else'];

$temp->appends($querystringArray);
Run Code Online (Sandbox Code Playgroud)


Ard*_*rda 14

在你的应用程序的任何地方添加它(例如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);
});
//////////////////
Run Code Online (Sandbox Code Playgroud)


geo*_*ldc 13

对于目前最新版本的Laravel(5.2),您可以使用Request facade来检索查询字符串并将其传递给您的paginator的appends()方法

$input = Request::input();
$myModelsPaginator = App\Models\MyModel::paginate();
$myModelsPaginator->appends($input);
Run Code Online (Sandbox Code Playgroud)


Luc*_* C. 10

附加除实际页面,表单标记和您不想传递的内容之外的所有输入:

$paginatedCollection->appends(request()->except(['page','_token']));
Run Code Online (Sandbox Code Playgroud)


Hos*_*agh 10

您可以在视图中使用请求助手

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

  • 完美的答案。谢谢 (2认同)

小智 9

在您显示分页的视图中...

{{ $results->appends(Request::except('page'))->links() }}
Run Code Online (Sandbox Code Playgroud)

appends 保留查询字符串值,除了“page”。不确定它是否适用于 POST 请求


Ras*_*sen 5

从先前的答案中得到启发,我最终将服务容器用于前端+ API支持。

在您的AppServiceProvider@boot()方法中:

$this->app->resolving(LengthAwarePaginator::class, function ($paginator) {
    return $paginator->appends(array_except(Input::query(), $paginator->getPageName()));
});
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,您最好绑定两种分页器类型,lenghaware 和普通 (2认同)