【问题标题】:How to automatically append query string to laravel pagination links?如何自动将查询字符串附加到 laravel 分页链接?
【发布时间】: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" 部分应该包含什么。有人可以指导我。谢谢

【问题讨论】:

    标签: laravel-4 pagination


    【解决方案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菲律宾语,想要一个根据菲律宾语的过滤器
              猜你喜欢
              • 2020-01-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多