You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用数组的paginate()成员函数报错:第三方API获取数据无法实现分页

报错根因

Call to a member function paginate() on array 报错的核心原因:paginate()是Laravel框架为Eloquent查询构造器、数据库查询结果集提供的专属方法,你从第三方API获取到的数据经过json_decode($one , true)处理后是普通PHP数组,没有内置paginate方法,无法直接调用。

解决方案

你可以使用Laravel官方提供的LengthAwarePaginator类手动为数组生成符合Laravel分页规范的实例,修改后的代码逻辑如下:

  • 第一步:在控制器顶部引入依赖类
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Http\Request;
  • 第二步:修改render方法中的分页逻辑
public function render(Request $request)
{
    try {
        $api = new \Binance\API('api','secret');
        $prices = $api->coins();
        // 此处json_encode再json_decode的操作冗余,如果$api->coins()已经返回数组可直接删除
        $coins = json_decode(json_encode($prices, true), true);

        // 手动分页配置
        $perPage = 10;
        $currentPage = $request->input('page', 1);
        $offset = ($currentPage - 1) * $perPage;

        // 截取当前页数据
        $currentPageData = array_slice($coins, $offset, $perPage);

        // 生成分页实例
        $paginatedCoins = new LengthAwarePaginator(
            $currentPageData,
            count($coins),
            $perPage,
            $currentPage,
            [
                'path' => $request->url(),
                'query' => $request->query()
            ]
        );

        return view('livewire.backend.crypto.cryptolist')->with('coins' , $paginatedCoins);
    }catch(\Exception $e)
    {
        return view('wrong')->with('e' , $e);
    }
}
注意事项
  • 生成的$paginatedCoins实例和数据库查询返回的分页对象用法完全一致,视图中可以直接调用$coins->links()渲染分页按钮,不需要修改原有视图分页逻辑。
  • 如果你的项目中已经将数组转为Laravel集合,也可以直接调用集合的forPage($page, $perPage)方法快速获取当前页数据,再手动生成分页实例即可。
  • 代码中冗余的JSON编解码步骤可以直接删除,减少不必要的性能开销。

内容的提问来源于stack exchange,提问作者Awminux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 23:51:02