Laravel API ResourceCollection不起作用

时间:2017-12-02 13:30:13

标签: 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)
{
    //return parent::toArray($request);
    return [
        "name" => $this->name,
        "price" => $this->price,
        "href" => [
            "link" => route("product.show", $this->id)
        ]
    ];
}

只是通过Resourse(而不是ResourceCollection)尝试它只是修改了方法调用,它正在工作,但我需要知道如何修复ResourceCollection return new ProductResource($product);

错误捕捉:

enter image description here

3 个答案:

答案 0 :(得分:3)

ProductCollection继承ResourceCollection而不是Resource,因此$ this不是模型而是集合。如果你想改变集合的每个元素,你可以使用map函数:

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

答案 1 :(得分:1)

更改

use Illuminate\Http\Resources\Json\ResourceCollection;

class ProductCollection extends ResourceCollection
{

use Illuminate\Http\Resources\Json\Resource;

class ProductCollection extends Resource
{

答案 2 :(得分:0)

创建两个资源

对于单个资源和集合资源

  • php artisan make:resource ProductResource
  • php artisan make:resource ProductCollection 或
  • php artisan make:resource Product --collection

然后转到您的控制器

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));
docs official