laravel-5 - 在laravel中对json数组进行分页
问题描述
我目前正在使用 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 文档:Paginating Query Builder Results Paginating Eloquent Results
手动创建 Paginator 非常有限,只说使用 paginator 或 lengthAwarePginator 并使用 array_slice。
有人可以指出我如何实现这一目标的正确方向吗?
解决方案
我假设您正在尝试以 Laravel 的方式对一个普通的 PHP 数组进行分页。
该paginate
函数仅适用于查询构建器,因此不适用于数组。要做你想做的事,你首先需要知道用户在哪个页面查看。通常,当前页面是通过page
GET 参数传递的,但 LaravelLengthAwarePaginator
提供了提取该参数的功能。你需要一个use
才能工作。
use Illuminate\Pagination\LengthAwarePaginator; // don't forget to add this
....
$current_page = LengthAwarePaginator::resolveCurrentPage();
然后你需要slice
包含结果的数组。相应地设置$perPage
变量。那么你要么需要:
把你的数组变成一个
Collection
和slice
它$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)
或
array_slice
直接用于您的阵列。$orders = $call->orders; $current_page_orders = array_slice($orders, ($current_page - 1) * $perPage, $perPage);
$current_page_orders
仍然是 (sliced) Collection
or array
,所以让我们创建一个分页器实例。
$orders_to_show = new LengthAwarePaginator($current_page_orders, count($orders_collection), $perPage);
$orders_to_show
现在是您想要的分页结果。您应该能够像处理数据库中的分页结果一样使用它。
推荐阅读
- c# - 如何使用 C# 模式匹配与元组
- c++ - 带有 Clang 10 的显式模板实例化的 ~queue 的未定义引用
- android - kotlin 中的运行时异常
- algorithm - 通过大师定理和迭代方法的递归关系 - 不同的对数底
- amazon-s3 - s3cmd 将文件从 tar 标准输入:[Errno 32] 损坏的管道
- r - R 声称 doParallel 所依赖的包不可用,即使它们已安装并且可以加载
- javascript - 你好 !反应问题我需要事件处理程序的帮助
- c# - System.Data.SqlClient.SqlException:'无效的列名'Project_ID_Backend'。'
- slick.js - 如何将导航链接(点)添加到光滑的灯箱?
- javascript - AngularJS Live 重新加载已启用。这是问题吗?