【问题标题】:Paginate json array in laravel在laravel中对json数组进行分页
【发布时间】:2018-05-01 20:33:10
【问题描述】:

我目前正在使用 Laravel 5.6,我有一个 api 的结果。我正在尝试对结果进行分页,但我无法做到。

我的json结果是这样的:

{#922 ▼
  +"orders": array:50 [▼
    0 => {#220 ▶}
    1 => {#234 ▶}
    2 => {#250 ▶}
    3 => {#263 ▶}
    4 => {#274 ▶}
    5 => {#297 ▶}
    6 => {#310 ▶}
    7 => {#322 ▶}
    8 => {#338 ▶}
    9 => {#351 ▶}
  ]
}

然后我得到订单并像这样放入一个变量中:$orders = $call->orders;

我已经尝试过:

$orders = $shopifyData->paginate(20)->toArray();

我收到此错误: 调用数组上的成员函数 paginate()

我也试过这个:$orders::Paginate(20); 也不行。

我想我错过了如何做到这一点的第一步,但老实说我迷路了。我真的不知道该怎么做。当你使用 Eloquent 模型从数据库中检索数据时,谷歌上有几个例子说明了如何做到这一点。它还显示了当您查询数据库但什么都没有时如何执行此操作。在 5.6 分页下找到的 laravel 文档: 分页查询生成器结果 分页雄辩的结果

手动创建分页器 非常有限,只说使用 paginator 或 lengthAwarePginator 并使用 array_slice。

有人可以指出如何实现这一目标的正确方向吗?

【问题讨论】:

    标签: laravel-5


    【解决方案1】:

    我假设您正在尝试以 Laravel 方式对一个普通的 PHP 数组进行分页。
    paginate 函数仅适用于查询构建器,因此不适用于数组。 要做你想做的事,你首先需要知道用户在哪个页面查看。通常,当前页面是通过 page GET 参数传递的,但 Laravel 的 LengthAwarePaginator 提供了提取该参数的功能。您需要use 才能使用。

    use Illuminate\Pagination\LengthAwarePaginator; // don't forget to add this
    ....
    $current_page = LengthAwarePaginator::resolveCurrentPage();
    

    然后你需要slice包含结果的数组。相应地设置$perPage 变量。那么你要么需要:

    1. 把你的数组变成Collectionslice

      $orders = $call->orders;
      $orders_collection = new Collection($orders); // needs a use statement
      $orders_collection = collect($orders); // alternative. You can use helper function
      $current_page_orders = $orders_collection->slice(($current_page - 1) * $perPage, $perPage)->all(); // slice($offset, $number_of_item)
      
    2. 或直接将array_slice 用于您的阵列。

      $orders = $call->orders;
      $current_page_orders = array_slice($orders, ($current_page - 1) * $perPage, $perPage);
      

    $current_page_orders 仍然是(切片的)Collectionarray,所以让我们创建一个分页器实例。

    $orders_to_show = new LengthAwarePaginator($current_page_orders, count($orders_collection), $perPage);
    

    $orders_to_show 现在是您想要的分页结果。您应该能够像处理数据库中的分页结果一样使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-26
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2020-06-10
      • 1970-01-01
      • 2021-06-14
      相关资源
      最近更新 更多