【问题标题】:How to JSON serialize relationship collection in Laravel如何在 Laravel 中对关系集合进行 JSON 序列化
【发布时间】:2020-08-17 03:27:11
【问题描述】:

我正在尝试通过我的模型代理 (hasMany()) 获取 members 的集合。

members 通过hasMany() 关系与Agency 相关,我正在这样获取它们:

$members = $this->model->where("id", $agencyId)->firstOrFail()->members();

在我的 Member.php 模型类中,我使用以下方法实现 JSONSerializable:

public function jsonSerialize()
    {
        $agency = $this->agency()->first();

        return [
            'member_id' => $this->member_id,
            'name' => $this->name(),
            'surname' => $this->surname(),
            'email' => $this->email(),
            'active' => $this->active,
            'agency' => [
                'id' => $agency->id,
                'name' => $agency->name,
            ]
        ];
    }

但是,当我尝试像这样获取成员时,从未调用过这个序列化:

$members = $this->model->where("id", $agencyId)->firstOrFail()->members();

return $members->paginate(
    $pageSize,
    ['*'],
    'page',
    $pageNumber
);

回复是:

 "current_page": 1,
  "data": [
    {
      "member_id": "0315c19f-8f5c-467a-97fd-a0422f5e14a5",
      "user_id": "77b36a51-4b86-34be-9a76-856ca68c3a1e",
      "agency_id": "d8c0cfab-686c-3b40-90ea-8bf52f07a3a0",
      "active": true,
      "deleted_at": null,
      "created_at": "2020-04-30 15:20:38",
      "updated_at": "2020-04-30 15:20:38"
    },
    {
      "member_id": "f522914d-17cd-470d-a5d6-365930958a29",
      "user_id": "994ca229-554e-3ae9-8459-24dc1479d75c",
      "agency_id": "d8c0cfab-686c-3b40-90ea-8bf52f07a3a0",
      "active": true,
      "deleted_at": null,
      "created_at": "2020-04-30 15:20:38",
      "updated_at": "2020-04-30 15:20:38"
    }
  ],
  "first_page_url": "\/agency\/d8c0cfab-686c-3b40-90ea-8bf52f07a3a0\/members?page=1",
  "from": 1,
  "last_page": 1,
  "last_page_url": "\/agency\/d8c0cfab-686c-3b40-90ea-8bf52f07a3a0\/members?page=1",
  "next_page_url": null,
  "path": "\/agency\/d8c0cfab-686c-3b40-90ea-8bf52f07a3a0\/members",
  "per_page": 50,
  "prev_page_url": null,
  "to": 2,
  "total": 2
}

为什么会在会员数据中显示时间戳等?为什么不使用 jsonSerialize 方法?

【问题讨论】:

    标签: json laravel collections


    【解决方案1】:

    我认为 Laravel 使用 toArray() 函数进行 JSON 序列化。如果您真的想控制 JSON 的输出,您应该查看参考资料。

    https://laravel.com/docs/7.x/eloquent-resources

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2017-05-02
      相关资源
      最近更新 更多