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

自定义Laravel Collection丢失分页元数据的问题如何解决?

问题原因

paginate() 返回的是分页器实例 LengthAwarePaginator,并非直接返回模型集合。你在分页器上直接调用自定义集合的 applyPrice() 方法时,Laravel会通过魔术方法转发请求到分页器持有的内部集合,而你当前 applyPrice() 方法返回的是转换后的集合对象,你用这个返回值覆盖了原本的分页器变量,就导致分页元数据全部丢失。

修复方法

调整控制器调用逻辑即可,不需要修改自定义集合的代码:

  1. 先获取分页器实例
  2. 通过分页器的 getCollection() 方法拿到内部的自定义集合,调用 applyPrice() 方法,因为 transform() 是直接修改集合本身的操作,不需要接收返回值
  3. 最后将完整的分页器实例传给资源返回

修改后的控制器代码:

public function index()
{
    $user = auth()->user();

    $products = Product::orderBy("name")->paginate();
    // 直接修改分页器内部的集合,不覆盖分页器本身
    $products->getCollection()->applyPrice($healthcenter);

    return HealthcenterProductResource::collection($products);
}

另外注意你applyPrice()方法里存在变量名笔误:$$stockPrice 属于变量写法错误,$productsStockPrice 也没有定义传入,需要你自行修正变量逻辑。
修复后返回的结果就会自动带上 total、current_page、last_page 等所有分页元数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:48:02