将 laravel 资源用于 return API 数据时更改键名
changing key names when leveraging laravel resources to return API data
所以我目前正在构建一个 API 并看到 laravel 添加了一个 API 资源,我假设它可以代替分形之类的东西?
但是 运行 遇到一个问题,当我使用 XyzCollection 资源访问 return 一个集合时,我无法更改我的数据库名称?所以我最终得到了与我的数据库中相同的命名约定..
为什么我不想出现这种情况有很多明显的原因(如果需要我可以进入它们)但是 - 有没有办法改变这些键名?
例如在我的一张表中我有一个 id,uuid,user_uuid
现在在分形中我会像这样变换这些字段 -
'id' => $xyz->uuid,
'user' => [
'data' => [
[
'user_id' => $xyz->user->uuid,
'username' => $xyz->user->username,
]
]
],
当我只能在 XyzCollection 中传递集合时,我该怎么做?
'data' => $this->collection,
在你说使用 XyzResource 之前......当我 returning all();记录,比如我需要在 API(或分页)等中做很多次。我只能从 XyzCollection 中做到这一点!
提前致谢
史蒂夫
您首先需要为单数 JsonResource 对象定义一个结构:
(php artisan make:resource Xyz
)
public function toArray($request)
{
return [
'user_id' => $this->uuid,
'username' => $this->username,
];
}
然后告诉你的 XyzCollection 使用 class:
Customizing The Underlying Resource Class
Typically, the
$this->collection
property of a resource collection is automatically
populated with the result of mapping each item of the collection to
its singular resource class. The singular resource class is assumed to
be the collection's class name without the trailing Collection
string.
For example, UserCollection
will attempt to map the given user
instances into the User
resource. To customize this behavior, you may
override the $collects
property of your resource collection
(来自 https://laravel.com/docs/5.7/eloquent-resources#concept-overview)
如果您的 ResourceCollection 没有做任何额外的事情,您可能并不总是需要它。每个 JsonResource 都可以使用 collection()
方法将自己转换为资源集合,例如UserResource::collection($users)
所以我目前正在构建一个 API 并看到 laravel 添加了一个 API 资源,我假设它可以代替分形之类的东西?
但是 运行 遇到一个问题,当我使用 XyzCollection 资源访问 return 一个集合时,我无法更改我的数据库名称?所以我最终得到了与我的数据库中相同的命名约定..
为什么我不想出现这种情况有很多明显的原因(如果需要我可以进入它们)但是 - 有没有办法改变这些键名?
例如在我的一张表中我有一个 id,uuid,user_uuid 现在在分形中我会像这样变换这些字段 -
'id' => $xyz->uuid,
'user' => [
'data' => [
[
'user_id' => $xyz->user->uuid,
'username' => $xyz->user->username,
]
]
],
当我只能在 XyzCollection 中传递集合时,我该怎么做?
'data' => $this->collection,
在你说使用 XyzResource 之前......当我 returning all();记录,比如我需要在 API(或分页)等中做很多次。我只能从 XyzCollection 中做到这一点!
提前致谢
史蒂夫
您首先需要为单数 JsonResource 对象定义一个结构:
(php artisan make:resource Xyz
)
public function toArray($request)
{
return [
'user_id' => $this->uuid,
'username' => $this->username,
];
}
然后告诉你的 XyzCollection 使用 class:
Customizing The Underlying Resource Class
Typically, the
$this->collection
property of a resource collection is automatically populated with the result of mapping each item of the collection to its singular resource class. The singular resource class is assumed to be the collection's class name without the trailingCollection
string.For example,
UserCollection
will attempt to map the given user instances into theUser
resource. To customize this behavior, you may override the$collects
property of your resource collection
(来自 https://laravel.com/docs/5.7/eloquent-resources#concept-overview)
如果您的 ResourceCollection 没有做任何额外的事情,您可能并不总是需要它。每个 JsonResource 都可以使用 collection()
方法将自己转换为资源集合,例如UserResource::collection($users)