我目前正在使用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。
有人能指出我如何实现这个目标的正确方向吗?
答案 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
变量。然后你需要:
将您的数组转换为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
仍然是(切片的)Collection
或array
,所以让我们创建一个paginator实例。
$orders_to_show = new LengthAwarePaginator($current_page_orders, count($orders_collection), $perPage);
$orders_to_show
现在是您想要的分页结果。您应该能够像处理数据库中的分页结果一样使用它。