【问题标题】:Modify response structure using Eloquent: API Resources使用 Eloquent 修改响应结构:API 资源
【发布时间】:2020-01-31 19:00:41
【问题描述】:

我是 Laravel 的新手。我使用 laravel 作为 REST 端点,我使用 Eloquent: API Resources 将我的数据转换为 JSON。

我正在使用集合和资源来解析我的数据来自我的查询。所以下面是我的回复结构:

data:
    0
        id
        name
    1
        id
        name

现在我需要对数据进行一些分类,因此我要求数据结构采用以下格式

data:
    24H
        0
            id
            name
        1
            id
            name
    7D
        0
            id
            name
        1
            id
            name

我尝试了几种方法来实现这一点,我尝试的静态测试方法是更改​​ ResourceCollection 的 toArray 方法并为我们获得的数据附加 24H 键。

但我知道这是不正确和通用的方式。

我想知道如何以通用和可扩展的方式实现上述响应格式。

非常感谢您的帮助。

谢谢。

【问题讨论】:

  • 24H 和 7D 密钥是否来自模型的某些属性?
  • 我已经执行了自己的选择查询来获取数据。如果可以在任何地方使用,我可以在 SQL 本身中添加另一列作为 24H 或 7D 类型。

标签: laravel eloquent laravel-eloquent-resource


【解决方案1】:

Laravel Collections 有一个 groupBy 方法可以帮助你,确保你想用作键的列也被选中。所以如果你有

data: 
    0: 
        id: 1
        name: Bob
        category: 24H

    1: 
        id: 2
        name: Bill
        category: 7D

然后$data->groupBy('category') 将返回以下内容

data: 
    24H:
        0: 
            id: 1
            name: Bob
            category: 24H

    7D: 
        0:
            id: 2
            name: Bill
            category: 7D

【讨论】:

  • 谢谢,但是我有一个很大的查询,所以我使用 DB::select 并在其中提供了我的 RAW 查询。我尝试在其中使用 groupBy,但它给出了错误 Call to a member function groupBy() on array 这是我的语法:DB::select($sql, [$this->user['id']])->groupBy('type');
  • 把你从 DB::select 取回的数组先放到一个集合中 collect(DB::select($sql, [$this->user['id'])) ->groupBy('type')
  • 感谢您的回答,在对资源类进行了一些修改后,我将数据转换为数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 2020-06-25
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
相关资源
最近更新 更多