laravel API集合属性名称在此集合示例上不存在

dced5bon  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(83)

当我在postman中使用GET类型的API资源集合时,它返回Property [name]不存在于此集合示例中,我不知道为什么,尽管我写的一切都是正确的,请帮助
我做了一个收藏夹,它返回信息
注意:当我返回$instructions = User::where('type',3)->get();它返回信息
这是我的代码
我的路由api.php

Route::resource('instructors',InstructorController::class);

我的收藏文件

public function toArray($request)
{
    // return parent::toArray($request);

    return [
        'name' => $this->name,
        'email' => $this->email,
        'area_id' => $this->area_id,
        'whatsapp' => $this->whatsapp,
        'phone' => $this->phone,
        'description' => $this->description,
    ];
}

我的控制器

public function index()
{

    $instructors = User::where('type',3)->get();
    $collection = new InstructorCollection($instructors);
    return response()->json(['data'=>$collection,'error']);
}

我的table

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name', 250);
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->bigInteger('area_id')->unsigned()->nullable();
        $table->foreign('area_id')->references('id')->on('areas')->onDelete('set null');
        $table->string('whatsapp')->nullable();
        $table->string('phone')->nullable();
        $table->string('facebook')->nullable();
        $table->tinyInteger('type');
        $table->text('description')->nullable();
        $table->integer('views')->default('0');
        $table->rememberToken();
        $table->timestamps();
        $table->softDeletes();
    });
}
qvtsj1bj

qvtsj1bj1#

您正在使用UserResourceCollection(可以访问$this->collection方法)并尝试访问实体属性,而不是使用普通的UserResource::collection方法,后者为您Map和填充多个UserResource,返回一个资源数组。
创建一个名为UserResource的普通资源,并从控制器方法调用UserResource::collection($instructors)
更多信息:https://laravel.com/docs/9.x/eloquent-resources#resource-collections

k4ymrczo

k4ymrczo2#

扩展Illuminate\Http\Resources\Json\JsonResource类,你的问题就解决了。如果你扩展了ResourceCollection类,代码如下。

public function toArray($request)
{
    return [
        'data' => $this->collection->map(function ($item) {
            return [
                'name' => $item->name,
                'email' => $item->email,
                'area_id' => $item->area_id,
                'whatsapp' => $item->whatsapp,
                'phone' => $item->phone,
                'description' => $item->description,
            ];
        }),
    ];
}

相关问题