在 Laravel 中导出 JSON 时如何将数据透视列移动到集合中?

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

我正在使用 Laravel 10(计划很快切换到 11)来公开 API。以下是我遇到的问题的简化版本。

我有一个包含用户的表和一个包含组的表,它们之间有多对多的关系。数据透视表有一列created_at,基本上可以归结为用户加入组的那一刻。当通过 API 检索用户时,我将使用数据透视来获取相关组。这会产生如下所示的 JSON(省略不相关的部分)

{
  'groups':[
     {
        'name': 'group A',
        'pivot': {
            'created_at': '2024-...'
        }
     },
     ...
  ]
}

但是,我更喜欢这样的输出:

{
  'groups':[
     {
        'name': 'group A',
        'joined': '2024-...'
     },
     ...
  ]
}

实现这一目标的最佳方法是什么?我可以完全手工制作 JSON,但是我会损失很多。还有其他端点会在用户上下文之外公开组,这些端点不应受到影响。

php laravel eloquent
1个回答
0
投票

通常,要修改 JSON,您可以创建资源

php artisan make:resource UserResource

UserResource

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'groups' => $this->groups->map(function ($group) {
            return [
                'name' => $group->name,
                'joined' => $group->pivot->created_at
            ];
        })
    ];
}

在控制器中

public function show($id) # in your method
{
    $user = User::with('groups')->findOrFail($id);
    return new UserResource($user); # call the UserResource
}
© www.soinside.com 2019 - 2024. All rights reserved.