laravel - 利用 laravel 资源返回 API 数据时更改键名
问题描述
所以我目前正在构建一个 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 中做到这一点!
提前致谢
史蒂夫
解决方案
您首先需要为单个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)
推荐阅读
- ios - 如果有内部动画,UIHostingController 中的 SwiftUI 视图在帧动画期间渲染不正确
- javascript - 反应原生图像裁剪选择器在平面列表上显示(渲染)图像时出现问题
- sql - 过滤不相关的行
- python - 使用 Panda 导入和编写多个 Excel 工作表
- typescript - 这是打字稿错误吗?向对象添加额外属性时出现“不可分配给类型”错误
- rust - 如何使用 LLDB 在 Windows 上调试 *-pc-windows-msvc Rust 程序?
- python - 有人可以帮助我使我的 pyautogui 自动化运行得更快吗?
- javascript - 从数组中的值中获取某个字母
- javascript - 如何使用 Blazor 从 Javascript 中获取 blob
- flutter - Flutter Real Time Database Account' 不是类型 '(dynamic, dynamic) => MapEntry 的子类型
'的'转变'