在laravel的Paginate json列阵

时间:2018-05-01 20:33:10

标签: laravel-5

我目前正在使用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模型从数据库中检索数据时,Google搜索有几个关于如何执行此操作的示例。它还显示了在查询数据库时如何执行此操作,但没有。在5.6分页下发现的laravel文档: 分页查询生成器结果 分散雄辩结果

  
    
      

手动创建Paginator       是非常有限的,只说使用paginator或lengthAwarePginator并使用array_slice。

    
  

有人能指出我如何实现这个目标的正确方向吗?

1 个答案:

答案 0 :(得分: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);
    
  3. $current_page_orders仍然是(切片的)Collectionarray,所以让我们创建一个paginator实例。

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

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