【问题标题】:Using limit parameter in paginate function在分页函数中使用限制参数
【发布时间】:2017-09-14 09:11:54
【问题描述】:

是否可以在 paginate() 函数中使用 'limit' 参数?

我正在尝试这个:

$users->where(...)->limit(50)->paginate($page)

...现在,如果我在数据库中有 100 个用户,那么 paginate 函数的响应将是全部 100 个用户而不是 50 个(或使用限制参数定义的用户数)。

那么,我的问题是:使用分页功能时是否可以实现限制参数?

【问题讨论】:

    标签: laravel eloquent laravel-query-builder laravel-pagination


    【解决方案1】:

    不,使用分页时无法限制查询。

    查询分页在内部使用skip()limit() 来选择正确的记录。应用于查询的任何limit() 都将被分页要求覆盖。

    如果您想对结果的子集进行分页,则需要先获取结果,然后为这些结果手动创建分页器。

    【讨论】:

      【解决方案2】:

      使用 LengthAwarePaginator。

      例子:

      $total = 50;
      $perPage = 10;
      $users = $users->where(...)->paginate($page);
      
      $users = new LengthAwarePaginator(
          $users->toArray()['data'], 
          $users->total() < $total ? $users->total() : $total, 
          $perPage, 
          $page
      );
      

      【讨论】:

        【解决方案3】:

        如果你想在 Laravel 查询中使用限制,那么我们将使用偏移量进行分页。

        第一次

        $users->where(...)->limit(10)->offset(0);

        下次点击时

        $users->where(...)->limit(10)->offset(10);

        更多下一次点击

        $users->where(...)->limit(10)->offset(20);

        【讨论】:

          【解决方案4】:

          正如@patricus 所说,这是不可能的,但你可以四处走走以获得你想要的东西,它会是这样的:

          $users=User::where(...)->limit(50);
          $users=$user->paginate(10);
          

          这个技巧对我有用,但经过一番思考,我意识到我真的不需要应用这个解决方案,因为分页已经限制了查询。您需要的只是满足您需求的正确查询。

          【讨论】:

            【解决方案5】:

            默认情况下,当前页面由 HTTP 请求上的页面查询字符串参数的值检测。当然这个值是 Laravel 自动检测到的,也会自动插入到分页器生成的链接中。

            所以,通知页面和分页,一切都应该没问题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-04-09
              • 1970-01-01
              • 2013-05-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多