我尝试了以下操作,但不起作用:
ArticleController.php:
public function index()
{
$articles = Article::latest()->paginate(10);
return ArticleCollection::collection($articles);
}
Article Collection.php:
<?php
namespace AppHttpResources;
use IlluminateHttpResourcesJsonResourceCollection;
class ArticleCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param IlluminateHttpRequest $request
* @return array|IlluminateContractsSupportArrayable|JsonSerializable
*/
public function toArray($request)
{
return [
'name' => $this->title,
'subtitle' => $this->subtitle,
'cover' => $this->cover,
];
}
}
这种转换模型的方法似乎适用于单个模型,但不适用于集合。使用集合API资源时,应如何自定义将返回的字段?
让您的DB查询定义最终字段
通过这种方式,在ArticleController
中使用select()
方法创建一个查询,在该方法中定义哪些DB字段发送到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
Article Collection
此文件可以设置为默认值,这允许您在ArticleController
上动态设置从select()
方法传递的值。
class ArticleCollection extends ResourceCollection
{
public function toArray($request)
{
return parent::toArray($request);
}
}
您可以这样使用它:
return new ArticleCollection($articales);