将 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)