Php 如何在资源集合中获取分页链接-Laravel 5.7.19

Php 如何在资源集合中获取分页链接-Laravel 5.7.19,php,laravel,vue.js,laravel-5,eloquent,Php,Laravel,Vue.js,Laravel 5,Eloquent,我正在使用LaravelAPI资源。当我们不使用任何资源集合时,我们会使用paginate(10)获得分页链接等。但当我使用Resource::collection时,我什么也得不到,只得到我放在Resource中的字段 这是我的控制器 return response()->json([ “items”=>LatestProjectsResource::collection(Project::has('pages')->where('type',$type)->latest()->paginat

我正在使用LaravelAPI资源。当我们不使用任何资源集合时,我们会使用paginate(10)获得分页链接等。但当我使用Resource::collection时,我什么也得不到,只得到我放在Resource中的字段

这是我的控制器

return response()->json([
“items”=>LatestProjectsResource::collection(Project::has('pages')->where('type',$type)->latest()->paginate(20))
]);
这是我的资源

公共功能待命($request)
{
返回[
'id'=>this->id,
'title'=>this->name,
“slug”=>this->slug,
'url'=>this->url,
“缩略图”=>新的缩略图资源($this->缩略图),
];
}
结果

我尝试了一些在线社区的答案,包括这一个,但它不起作用

我尝试了
$this->collection
,但没有成功


请在这里帮助我。

我已经通过重写常规资源类的
集合
方法解决了这个问题

public static function collection($data)
{
    /* is_a() makes sure that you don't just match AbstractPaginator
     * instances but also match anything that extends that class.
     */
    if (is_a($data, \Illuminate\Pagination\AbstractPaginator::class)) {
        $data->setCollection(
            $data->getCollection()->map(function ($listing) {
                return new static($listing);
            })
        );

        return $data;
    }

    return parent::collection($data);
}

这只是检查给定的数据是否为和Laravel的paginator类的实例,如果是,它只是修改基础集合并返回相同的paginator实例。您可以将其放在抽象集合类或每个资源类中。

我通过重写常规资源类的
集合方法解决了这个问题

public static function collection($data)
{
    /* is_a() makes sure that you don't just match AbstractPaginator
     * instances but also match anything that extends that class.
     */
    if (is_a($data, \Illuminate\Pagination\AbstractPaginator::class)) {
        $data->setCollection(
            $data->getCollection()->map(function ($listing) {
                return new static($listing);
            })
        );

        return $data;
    }

    return parent::collection($data);
}

这只是检查给定的数据是否为和Laravel的paginator类的实例,如果是,它只是修改基础集合并返回相同的paginator实例。您可以将其放在抽象集合类或每个资源类中。

要使代码干净,请创建一个分页资源以跨不同集合使用,并创建一个用于编辑分页详细信息的位置

然后在任何资源中添加分页资源,如下所示

这是分页资源
公共函数toArray($request):数组
{
返回[
'total'=>this->total(),
“count”=>this->count(),
“每页”=>$this->perPage(),
“当前页面”=>this->currentPage(),
“总页数”=>$this->lastPage()
];
}
并将其添加到任何其他类似的集合中

公共函数toArray($request):数组
{
$pagination=新的分页资源($this);
返回[
“模板”=>$this->collection,
$pagination::$wrap=>$pagination,
];
}

要使代码干净,请创建一个分页资源,以便在不同的集合中使用,并创建一个用于编辑分页详细信息的单一位置

然后在任何资源中添加分页资源,如下所示

这是分页资源
公共函数toArray($request):数组
{
返回[
'total'=>this->total(),
“count”=>this->count(),
“每页”=>$this->perPage(),
“当前页面”=>this->currentPage(),
“总页数”=>$this->lastPage()
];
}
并将其添加到任何其他类似的集合中

公共函数toArray($request):数组
{
$pagination=新的分页资源($this);
返回[
“模板”=>$this->collection,
$pagination::$wrap=>$pagination,
];
}

您是否尝试从您的资源中返回
['data'=>$this->collection]
?是的!它为我提供了空链接,因为您的自定义响应丢失了链接。它与
return LatestProjectsResource::collection(…)一起工作
,但是主键的名称是
数据
,而不是
。在您的情况下,是否必须将其命名为
项目
?您找到解决方案了吗?您是否尝试从您的资源中返回
['data'=>$this->collection]
?是的!它为我提供了空链接,因为您的自定义响应丢失了链接。它与
return LatestProjectsResource::collection(…)一起工作
,但是主键的名称是
数据
,而不是
。在您的案例中,是否必须将其命名为
项目
?您找到解决方案了吗?