如何自定义Laravel的CollectionAPI资源?
How to customize Laravel's Collection API resources?
我尝试了以下但它不起作用:
ArticleController.php:
public function index()
{
$articles = Article::latest()->paginate(10);
return ArticleCollection::collection($articles);
}
ArticleCollection.php:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class ArticleCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'name' => $this->title,
'subtitle' => $this->subtitle,
'cover' => $this->cover,
];
}
}
这种模型转换似乎适用于单个模型,但不适用于 collection。我应该如何自定义在使用 collections API 资源时将返回哪些字段?
你可以这样使用它:
return new ArticleCollection($articales);
让您的数据库查询定义最终字段
这样检查,在您的 ArticleController
中使用 select()
方法创建一个查询,您在其中定义 哪些数据库字段 被发送到 ArticleCollection
.
集合将只负责返回给它的那个!
public function index()
{
return new ArticleCollection(
Article::latest()->select(['name', 'subtitle', 'cover'])->paginate(10)
);
}
结果查询
select
`name`,
`subtitle`,
`cover`
from
`articles`
order by
`created_at` desc
limit
10 offset 0
文章集
此文件可以设置为默认文件,这允许您动态设置从 ArticleController
上的 select()
方法传递的值。
class ArticleCollection extends ResourceCollection
{
public function toArray($request)
{
return parent::toArray($request);
}
}
我尝试了以下但它不起作用:
ArticleController.php:
public function index()
{
$articles = Article::latest()->paginate(10);
return ArticleCollection::collection($articles);
}
ArticleCollection.php:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class ArticleCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
return [
'name' => $this->title,
'subtitle' => $this->subtitle,
'cover' => $this->cover,
];
}
}
这种模型转换似乎适用于单个模型,但不适用于 collection。我应该如何自定义在使用 collections API 资源时将返回哪些字段?
你可以这样使用它:
return new ArticleCollection($articales);
让您的数据库查询定义最终字段
这样检查,在您的 ArticleController
中使用 select()
方法创建一个查询,您在其中定义 哪些数据库字段 被发送到 ArticleCollection
.
集合将只负责返回给它的那个!
public function index()
{
return new ArticleCollection(
Article::latest()->select(['name', 'subtitle', 'cover'])->paginate(10)
);
}
结果查询
select
`name`,
`subtitle`,
`cover`
from
`articles`
order by
`created_at` desc
limit
10 offset 0
文章集
此文件可以设置为默认文件,这允许您动态设置从 ArticleController
上的 select()
方法传递的值。
class ArticleCollection extends ResourceCollection
{
public function toArray($request)
{
return parent::toArray($request);
}
}