Laravel中仅用UserResource能否实现两种用户API输出结构?
问题描述
我有两个用户相关API:
- 返回单条用户记录
- 返回用户集合
它们的预期输出结构如下:
单条记录API输出
{ "message": "Employee record", "data": { "first_name": "..and so on" } }
集合API输出
{ "message": "Employee record", "data": [ { "first_name": "..and so on" }, { "first_name": "..and so on" } ] }
请问仅使用UserResource就能实现这个需求吗?还是需要另外创建集合资源?
解答
不需要额外创建集合资源,只用UserResource就可以搞定。
具体用法:
- 返回单条记录时,直接实例化
UserResource并传入单个模型实例,它会自动把data处理为对象格式。 - 返回集合时,调用
UserResource::collection()方法并传入模型集合,就能自动生成数组格式的data,包裹多个用户对象。
如果要统一添加message这类外层字段,直接在UserResource里通过with()方法定义就行,单条和集合请求都会自动带上这个字段,不用分开处理。
示例代码:
class UserResource extends JsonResource { public function toArray($request) { return [ 'first_name' => $this->first_name, // 其他字段... ]; } public function with($request) { return [ 'message' => 'Employee record', ]; } }
这样不管是单条还是集合接口,输出结构都会完全符合你的预期。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

