Laravel API ResourceCollection 不起作用
Laravel API ResourceCollection doesnt works
我想知道如何开始工作API 调用 ResourceCollection
错误:
Undefined property: Illuminate\Database\Query\Builder::$name
我的产品方法:
public function index()
{
return ProductCollection::collection(Product::all());
}
我的 collection :
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);
错误截图:
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)
]
];
});
}
改变
use Illuminate\Http\Resources\Json\ResourceCollection;
class ProductCollection extends ResourceCollection
{
到
use Illuminate\Http\Resources\Json\Resource;
class ProductCollection extends Resource
{
创建两个资源
对于单个资源和 collection 资源
- php artisan make:resource 产品资源
- php artisan make:resource ProductCollection 或
- php artisan make:resource 产品 --collection
然后转到您的控制器
<pre><code>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
我想知道如何开始工作API 调用 ResourceCollection
错误:
Undefined property: Illuminate\Database\Query\Builder::$name
我的产品方法:
public function index()
{
return ProductCollection::collection(Product::all());
}
我的 collection :
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);
错误截图:
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)
]
];
});
}
改变
use Illuminate\Http\Resources\Json\ResourceCollection;
class ProductCollection extends ResourceCollection
{
到
use Illuminate\Http\Resources\Json\Resource;
class ProductCollection extends Resource
{
创建两个资源
对于单个资源和 collection 资源
- php artisan make:resource 产品资源
- php artisan make:resource ProductCollection 或
- php artisan make:resource 产品 --collection
然后转到您的控制器
<pre><code>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