Laravel资源分页元数据丢失。

3

最近我使用资源实现了Laravel分页。但问题是当我添加一些自定义属性或包装器时,分页元数据就会丢失。没有包装器或自定义属性时,一切正常。

资源类

class UserResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
        ];
    }
}

控制器功能

public function index()
{
        return response()->json([
            'success' => 'true',
            'message'=>'Request successful',
            'result' => UserResource::collection(User::paginate(3))
        ]);
}

输出

{
    "success": "true",
    "message": "Request successful",
    "result": [
        {
            "id": 1,
            "name": "System Admin",
            "email": "admin@abc.com"
        }
    ]
}

^ 分页数据缺失

期望结果

{
  "success": "true",
  "message": "Request successful",
  "result": {
    "data": [
      {
        "id": 1,
        "name": "System Admin",
        "email": "admin@abc.com"
      },
      {
        ......
      }
    ],
    "links": {
      "first": "http://localhost:8080/api/v1/user?page=1",
      "last": "http://localhost:8080/api/v1/user?page=4",
      "prev": null,
      "next": "http://localhost:8080/api/v1/user?page=2"
    },
    "meta": {
      "current_page": 1,
      "from": 1,
      "last_page": 4,
      "path": "http://localhost:8080/api/v1/user",
      "per_page": 3,
      "to": 3,
      "total": 11
    }
  }
}

感谢您的选择。

你的问题几乎与之前的问题完全相同。请查看我的答案,点击这里 - undefined
2个回答

11

我使用了以下方法解决了这个问题:

return response()->json([
       'success' => 'true',
       'message'=>'Request successful',
       'result' => UserResource::collection(User::paginate(3))->response()->getData()
      ]);

7
非常简单的解决方案。
$data = UserResource::collection(User::paginate(3))->resource;
    
     return response()->json([
               'success' => 'true',
               'message'=>'Request successful',
               'data' => $data
              ]);enter code here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接