请问什么叫资源集合啊?

新手读文档,读到:

资源集合

除了生成资源转换单个模型外,你还可以生成资源集合用来转换模型的集合。这允许你在响应中包含与给定资源相关的链接与其他元信息。

还不理解,什么叫资源集合哈,和普通的资源有啥区别啊?

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4

你问的是 API 资源那章节的吧?

首先你要理解什么是 集合

你可以简单的理解为集合是一个包含多种数据的数组,常见的就是我们的查询,例如:

Model::query()->get()

返回结果就是一个由多条记录组成的集合。


那什么是资源集合呢?我们在提供 API 接口时,通常会遇到和前端的数据字段或者数据格式约定的问题。

有一张 users 表,字段分别是 id, name, age, occupany,created_at

例如:
数据库字段设计是 created_at,但是前端想要的字段名是 create_time

再例如:
一个 query() 的查询结果包含很多不必要的字段 ,此时,前端只需要 nameagecreated_at 字段并将 created_at 转换为 create_time ,在不使用资源合集的情况下,我们通常要这样做都需要写 select 语句,

User::query()->select('name','age','created_at as create_time')->get();

这样做其实也没什么问题,但如果有多个接口的查询都需要这样来转换的话,或者每个查询我们都需要手动 select 字段,对我们来说也是很麻烦的,并且不好维护,如果有一天表字段新增了一个 balance 字段并需要查询给前端,那我们需要修改所有相关的 select 查询。

此时资源集合就派上用场了,你可以把资源集合理解成为对集合的二次处理。
在资源集合中我们可以把数据随意转换为我们想要的格式

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class UserCollection extends ResourceCollection
{
    /**
     * 将资源集合转换为数组
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'name' => $this->name,
            'age' => $this->age,
            'create_time' => $this->created_at,
        ];
    }
}

此时我们不需要再关心 sql 语句的 select() ,只需要返回一个集合结果给前端就好

return new UserCollection(User::query()->get());
1年前 评论

资源是一个苹果,资源集合就是一箱子苹果。

苹果箱子上有产地,毛重,净重等信息。苹果上没这些信息。

1年前 评论

你问的是 API 资源那章节的吧?

首先你要理解什么是 集合

你可以简单的理解为集合是一个包含多种数据的数组,常见的就是我们的查询,例如:

Model::query()->get()

返回结果就是一个由多条记录组成的集合。


那什么是资源集合呢?我们在提供 API 接口时,通常会遇到和前端的数据字段或者数据格式约定的问题。

有一张 users 表,字段分别是 id, name, age, occupany,created_at

例如:
数据库字段设计是 created_at,但是前端想要的字段名是 create_time

再例如:
一个 query() 的查询结果包含很多不必要的字段 ,此时,前端只需要 nameagecreated_at 字段并将 created_at 转换为 create_time ,在不使用资源合集的情况下,我们通常要这样做都需要写 select 语句,

User::query()->select('name','age','created_at as create_time')->get();

这样做其实也没什么问题,但如果有多个接口的查询都需要这样来转换的话,或者每个查询我们都需要手动 select 字段,对我们来说也是很麻烦的,并且不好维护,如果有一天表字段新增了一个 balance 字段并需要查询给前端,那我们需要修改所有相关的 select 查询。

此时资源集合就派上用场了,你可以把资源集合理解成为对集合的二次处理。
在资源集合中我们可以把数据随意转换为我们想要的格式

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class UserCollection extends ResourceCollection
{
    /**
     * 将资源集合转换为数组
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'name' => $this->name,
            'age' => $this->age,
            'create_time' => $this->created_at,
        ];
    }
}

此时我们不需要再关心 sql 语句的 select() ,只需要返回一个集合结果给前端就好

return new UserCollection(User::query()->get());
1年前 评论

以上三位大佬的回答,都很牛! :joy:

1年前 评论
秦晓武

单条数据返回是资源(resource),列表数据返回是资源集合(collection)

new UserResource(User::first())
new UserCollection(User::get())
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!