利用laravel资源返回API数据时更改键名

问题描述 投票:0回答:2

所以我目前正在构建一个 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 做到这一点!

提前致谢

史蒂夫

laravel laravel-5.7 laravel-resource
2个回答
1
投票

您首先需要为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)


0
投票

就像你在这里看到的那样,一开始可能很奇怪: https://laravel.com/docs/8.x/eloquent-resources#customizing-the-underlying-resource-class

© www.soinside.com 2019 - 2024. All rights reserved.