你问的是 API 资源那章节的吧?
首先你要理解什么是 集合
你可以简单的理解为集合是一个包含多种数据的数组,常见的就是我们的查询,例如:
Model::query()->get()
返回结果就是一个由多条记录组成的集合。
那什么是资源集合呢?我们在提供 API 接口时,通常会遇到和前端的数据字段或者数据格式约定的问题。
有一张 users 表,字段分别是 id
, name
, age
, occupany
,created_at
例如:
数据库字段设计是 created_at
,但是前端想要的字段名是 create_time
。
再例如:
一个 query() 的查询结果包含很多不必要的字段 ,此时,前端只需要 name
、age
和 created_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());
你问的是 API 资源那章节的吧?
首先你要理解什么是 集合
你可以简单的理解为集合是一个包含多种数据的数组,常见的就是我们的查询,例如:
Model::query()->get()
返回结果就是一个由多条记录组成的集合。
那什么是资源集合呢?我们在提供 API 接口时,通常会遇到和前端的数据字段或者数据格式约定的问题。
有一张 users 表,字段分别是 id
, name
, age
, occupany
,created_at
例如:
数据库字段设计是 created_at
,但是前端想要的字段名是 create_time
。
再例如:
一个 query() 的查询结果包含很多不必要的字段 ,此时,前端只需要 name
、age
和 created_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());
推荐文章: