为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel Eloquent API 资源:从响应(集合)中删除“数据”键

Laravel Eloquent API 资源:从响应(集合)中删除“数据”键

PHP
翻翻过去那场雪 2022-10-28 15:29:29
我有雄辩的 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"    }]
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

要获取所有数据,只需使用->all()

UserResource::collection($users)->all()

您可以在有关集合的官方文档中看到更多信息,其中解释说 usingall()为您提供集合所表示的底层数组。


查看完整回答
反对 回复 2022-10-28
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

如果您想使用自定义键而不是数据,您可以在资源类上定义 $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


查看完整回答
反对 回复 2022-10-28
  • 2 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信