Laravel API ResourceCollection不起作用
我想知道如何使用ResourceCollection获取工作API调用 错误: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
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));