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

Laravel 5.5 API资源集合分页自定义实现问题

解决Laravel API Resource自定义分页结构问题

你遇到的问题核心在于:Laravel的ResourceCollection在序列化生成JSON响应时,只会默认处理data、links和meta字段。你直接给资源对象添加的pagination属性虽然存在于实例中(所以能通过->pagination获取到),但并没有被纳入序列化流程,因此不会出现在最终的响应里。

下面给你两种可行的解决方案:

方案一:自定义ResourceCollection类(推荐)

创建专门的Collection类来控制整个响应结构,这是Laravel官方推荐的方式,扩展性更强,也更符合规范:

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class TaxCollection extends ResourceCollection
{
    /**
     * 转换资源集合为数组
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'data' => $this->collection,
            'pagination' => [
                'total' => $this->total(),
                'count' => $this->count(),
                'per_page' => $this->perPage(),
                'current_page' => $this->currentPage(),
                'total_pages' => $this->lastPage()
            ]
        ];
    }
}

之后在控制器里直接返回这个自定义Collection即可:

use App\Http\Resources\TaxCollection;

// ...

return new TaxCollection($taxes);

方案二:在Resource的collection方法中使用additional方法

如果不想单独创建Collection类,可以修改你现有的TaxResource的collection方法,利用Laravel提供的additional方法附加分页数据——这个方法专门用来给响应添加额外元数据,会被自动纳入序列化流程:

public static function collection($resource)
{
    $baseCollection = parent::collection($resource);
    
    return $baseCollection->additional([
        'pagination' => [
            'total' => $resource->total(),
            'count' => $resource->count(),
            'per_page' => $resource->perPage(),
            'current_page' => $resource->currentPage(),
            'total_pages' => $resource->lastPage()
        ]
    ]);
}

修改完成后,你在控制器里返回TaxResource::collection($taxes)时,响应里就会自动带上你想要的pagination结构了。

这两种方式都能满足需求:第一种适合需要长期维护或有复杂结构定制需求的场景,第二种则更轻量化、改动更小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:50