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