所以我目前正在构建一个 API,看到 laravel 添加了一个 API 资源,我假设它代替了分形之类的东西?
但是遇到一个问题,当我使用 XyzCollection 资源返回集合时,我无法更改我的数据库名称?所以我最终得到了与数据库中相同的命名约定..
有很多明显的原因为什么我不想出现这种情况(如果需要的话我可以进入它们)但是 - 有没有办法改变这些键名?
例如,在我的一张表中,我有一个 id、uuid、user_uuid 现在在分形中,我将像这样变换这些字段 -
'id' => $xyz->uuid,
'user' => [
'data' => [
[
'user_id' => $xyz->user->uuid,
'username' => $xyz->user->username,
]
]
],
当我所能做的就是传递 XyzCollection 中的集合时,我该怎么做?
'data' => $this->collection,
在你说使用 XyzResource 之前...当我返回 all(); 时像我需要在 API(或分页)等中做很多次记录等。我只能从 XyzCollection 做到这一点!
提前致谢
史蒂夫
您首先需要为singular JsonResource 对象定义一个结构:
(
php artisan make:resource Xyz
)
public function toArray($request)
{
return [
'user_id' => $this->uuid,
'username' => $this->username,
];
}
然后告诉你的 XyzCollection 使用该类:
自定义底层资源类
通常,
资源集合的属性是自动的 填充集合中每个项目映射到的结果 其独特的资源类别。假设单一资源类 是集合的类名,不带尾随$this->collection
字符串。Collection
例如,
将尝试映射给定的用户 实例到UserCollection
资源中。要自定义此行为,您可以 覆盖资源集合的User
属性$collects
(来自 https://laravel.com/docs/5.7/eloquent-resources#concept-overview)
如果您的 ResourceCollection 不做任何额外的事情,您可能并不总是需要它。每个 JsonResource 都可以使用
collection()
方法将自身转换为资源集合,例如UserResource::collection($users)