php - How to get only specific fields from Laravel Eloquent API Resource?

one text

Solution:

1. Only select what you need

If you add parentheses after reviews, you can return a Builder instance, which will allow you to add queries to the relationship.
With this, you can select the fields you need.

public function toArray($request) {
    return [
        'id'          => $this->id,
        'name'        => $this->name,
        'description' => $this->description,
        'price'       => $this->price,
        'stock'       => $this->stock,
        'reviews'     => $this->reviews()->select('user_name', 'review')->get(),
    ];
}

2. Create a ReviewResource

You can also create a resource for Review that returns it's own data.

class ReviewResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'user_name' => $this->user_name,
            'review' => $this->review,
        ];
    }
}
class ItemResource extends JsonResource
{
    public function toArray($request) {
        return [
            'id'          => $this->id,
            'name'        => $this->name,
            'description' => $this->description,
            'price'       => $this->price,
            'stock'       => $this->stock,
            'reviews'     => ReviewResource::collection($this->reviews),
        ];
    }
}

Source