Laravel Eloquent API 资源:从响应(集合)中删除“数据”键
Posted
技术标签:
【中文标题】Laravel Eloquent API 资源:从响应(集合)中删除“数据”键【英文标题】:Laravel Eloquent API Resources: remove "data" key from response (collection) 【发布时间】:2020-06-25 06:39:24 【问题描述】:我有 Eloquent API 资源 UserResource
。当我尝试运行类似这样的代码时:
$users = User::paginate(10);
return UserResource::collection($users);
响应将是这样的:
"data": [
"name": "Fatima Conroy",
"email": "ocie.stark@example.org"
,
"name": "John Doe",
"email": "john.doe@example.org"
]
如何删除 data
键或将其重命名以获得类似此响应的内容?
[
"name": "Fatima Conroy",
"email": "ocie.stark@example.org"
,
"name": "John Doe",
"email": "john.doe@example.org"
]
【问题讨论】:
【参考方案1】:要获取所有数据,只需使用->all()
UserResource::collection($users)->all()
您可以在 official doc about collections 中看到更多信息,其中解释了使用 all()
可以获得由集合表示的底层数组。
【讨论】:
酷!我还可以使用UserResource::collection($users)->values()
删除基于字符串的键。谢谢!【参考方案2】:
如果您想使用自定义键而不是数据,您可以在资源类上定义 $wrap 属性:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class User extends JsonResource
/**
* The "data" wrapper that should be applied.
*
* @var string
*/
public static $wrap = 'user';
如果您想禁用“数据”键而不是数据,您可以在资源类上定义 $wrap = null 属性:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class User extends JsonResource
/**
* The "data" wrapper that should be applied.
*
* @var string
*/
public static $wrap = null;
如果您想禁用最外层资源的包装,您可以在基础资源类上使用 withoutWrapping 方法。通常,您应该从您的 AppServiceProvider 或其他服务提供者调用此方法,该服务提供者会在对您的应用程序的每个请求中加载:
<?php
namespace App\Providers;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
/**
* Register any application services.
*
* @return void
*/
public function register()
//
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
JsonResource::withoutWrapping(); // This command removes "data" key from all classes extended from "JsonResource"
user::withoutWrapping(); // This command removes "data" key from only "user"
您也可以参考以下官方链接了解更多信息: https://laravel.com/docs/8.x/eloquent-resources#data-wrapping
【讨论】:
以上是关于Laravel Eloquent API 资源:从响应(集合)中删除“数据”键的主要内容,如果未能解决你的问题,请参考以下文章
具有 Relation 和 Eloquent 的 Laravel Api 资源
Laravel JSON API: 如何从数据库中创建自定义的虚拟资源(用于聚合值)?
Laravel:在 API 测试中使用 Eloquent 模型