Laravel 8 资源集合
资源是将单个模型转换成数组,而资源集合是将模型的集合转换成数组。并不是必需得为每一个模型类都定义一个资源集合类,因为所有资源都有提供一个 collection
方法来动态生成一个「临时」资源集合:
use App\Http\Resources\User as UserResource;
use App\Models\User;
Route::get('/user', function () {
return UserResource::collection(User::all());
});
不过,如果你需要自定义返回集合的元数据,则仍需要定义一个资源集合:
<?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 [
'data' => $this->collection,
'links' => [
'self' => 'link-value',
],
];
}
}
和单个资源一样,你可以在路由或控制器中直接返回资源集合:
use App\Http\Resources\UserCollection;
use App\Models\User;
Route::get('/users', function () {
return new UserCollection(User::all());
});