Laravel API ResourceCollection不起作用

Laravel API ResourceCollection不起作用,laravel,laravel-5.5,Laravel,Laravel 5.5,我想知道如何使用ResourceCollection获取工作API调用 错误: Undefined property: Illuminate\Database\Query\Builder::$name 我的产品方法: public function index() { return ProductCollection::collection(Product::all()); } 我的收藏: public function toArray($request) { //retu

我想知道如何使用ResourceCollection获取工作API调用

错误:

Undefined property: Illuminate\Database\Query\Builder::$name
我的产品方法:

 public function index()
{
    return ProductCollection::collection(Product::all());
}
我的收藏:

public function toArray($request)
{
    //return parent::toArray($request);
    return [
        "name" => $this->name,
        "price" => $this->price,
        "href" => [
            "link" => route("product.show", $this->id)
        ]
    ];
}
通过resource(不是ResourceCollection)尝试了它,刚刚修改了方法调用,它正在工作,但我需要知道如何修复ResourceCollection
返回新的ProductResource($product)

错误捕捉:


ProductCollection继承ResourceCollection而不是资源,因此$this不是模型而是集合。如果要对集合的每个元素进行变异,可以使用如下映射函数:

public function toArray($request)
{
    return $this->map(function($product) {
        return [
            "name" => $this->name,
            "price" => $this->price,
            "href" => [
                "link" => route("product.show", $this->id)
            ]
        ];
    });
}
改变

use Illuminate\Http\Resources\Json\ResourceCollection;

class ProductCollection extends ResourceCollection
{

创建两个资源 对于单个资源和集合资源
  • php artisan make:resource ProductResource
  • php artisan make:resource ProductCollection或
  • php artisan make:资源产品--集合
然后转到控制器


如果我们使用的是ResourceCollection而不是JsonResource,那么为什么还要循环它呢?这里有些东西真的让人困惑…请更改您的答案格式以提高可读性。希望它能帮助@pejmankheyri这会更好,谢谢
use Illuminate\Http\Resources\Json\Resource;

class ProductCollection extends Resource
{
use App\Http\Resources\ProductCollection;
use App\Http\Resources\ProductResource;
// for single collection resource in   
return new ProductCollection(Product::all()); //or
return ProductResource::collection(Product::all());
//for single resource
return new ProductResource(Product::findOrFail($id));