Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Sinres's avatar

Receives a null response from Resource - Laravel API

Hello Guy's!

I have some problem. When I test my API by Postman I receives a null response when create a new record in database.

This is my store method from Controller:

    public function store(Role $role, StoreRoleRequest $request): RoleResource
    {
        $role->create($request->validated());

        return new RoleResource($role);
    }

And my Resources:

<?php

namespace App\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class RoleResource extends JsonResource
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            // 'permissions' => PermissionResource::collection($this->whenLoaded('permissions'))
        ];
    }
}

Response from Postman when created new role:

{
    "data": {
        "id": null,
        "name": null
    }
}

Have any ideas?

0 likes
3 replies
MichalOravec's avatar
Level 75
public function store(StoreRoleRequest $request): RoleResource
{
    $role = Role::create($request->validated());

    return new RoleResource($role);
}
Sinres's avatar

Michal again you save my life haha :-) Why doesn't it work my way? The code looks better then. It works fine in the update method, but am I doing it right?

public function update(Role $role, StoreRoleRequest $request): RoleResource
    {
        $role->fill($request->validated())->save();

        return new RoleResource($role);
    }
MichalOravec's avatar

In your case role doesn't exist. So you need to create first and assing to $role variable.

I would change update to this

public function update(StoreRoleRequest $request, Role $role): RoleResource
{
    $role->update($request->validated());

    return new RoleResource($role);
}

But it's basically the same.

Please or to participate in this conversation.