Я пытаюсь преобразовать данные json для всех продуктов, используя коллекции ресурсов Laravel.Но это выдает ошибку.
«Свойство [имя] не существует в этом экземпляре коллекции».
Я проверил официальную документацию, и они реализовали ее ваналогичным образом.
ProductController.php
public function index()
{
return new ProductCollection(Product::all());
}
ProductCollection.php
namespace App\Http\Resources\Product;
use Illuminate\Http\Resources\Json\ResourceCollection;
class ProductCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'name' => $this->name,
'price' => $this->price
];
}
}
ProductResource.php
namespace App\Http\Resources\Product;
use Illuminate\Http\Resources\Json\JsonResource;
class ProductResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'name' => $this->name,
'description' => $this->detail,
'price' => $this->price,
'stock' => $this->stock,
'discount' => $this->discount,
'effectivePrice' => round($this->price * (1 - ($this->discount/100)), 2),
'rating' => $this->reviews->count() > 0 ? round($this->reviews->sum('star') / $this->reviews->count(), 2) : 'No Ratigs Yet',
'href' => [
'reviews' => route('reviews.index', $this->id)
]
];
}
}
ПРИМЕЧАНИЕ: Работает нормально, когда не преобразует ProductCollection, т. е. когда функция ProductCollection toArray () выглядит следующим образом:
public function toArray($request)
{
return parent::toArray($request);
}