【发布时间】:2019-04-03 18:30:21
【问题描述】:
我试图弄清楚为什么 laravel 5.6 当你有一个集合时,它会打印出分页的 json 响应,而不是在分页列表上使用带有 json 的正常返回响应。所以我现在把这个返回到我的收藏中。
{
"data": [],
"links": {
"first": "http://local/api/v3/x?=1",
"last": "http://local/api/v3/x?=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "http://local/api/v3/x",
"per_page": "5",
"to": 3,
"total": 3
}
}
我希望它看起来像:
{
"current_page": 1,
"data": [],
"first_page_url": "http://local/api/v3/x?=1",
"from": null,
"last_page": 1,
"last_page_url": "http://local/api/v3/x?=1",
"next_page_url": null,
"path": "http://local/api/v3/x",
"per_page": 50,
"prev_page_url": null,
"to": null,
"total": 0
}
我尝试在集合中使用以下代码,但它不起作用,我找到了一些函数来获取我想要的数据,但我仍然缺少大部分数据。
<?php
namespace App\Http\Resources\V3;
use Illuminate\Http\Resources\Json\ResourceCollection;
class DeedTypeCollection extends ResourceCollection
{
public $collects = 'App\Http\Resources\V3\x';
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'current_page' => $this->currentPage(),
'data' => $this->collection,
'first_page_url' => $this->links['first'],
'from' => $this->meta['from'],
'last_page' => $this->meta['last_page'],
'last_page_url' => $this->links['last'],
'next_page_url' => $this->links['next'],
'path' => $this->meta['path'],
'per_page' => $this->meta['per_page'],
'prev_page_url' => $this->links['prev'],
'to' => $this->meta['to'],
'total' => $this->meta['total']
];
}
}
为什么 laravel 会更改集合的默认分页,我该如何解决这个问题以匹配默认/第二个数据集。
这里是构建查询的地方。
/**
* Function: prepareIndexSelect.
*
* @param: $request - Request sent to controller
*
* Description: Returns queried collection.
*/
public static function prepareIndexSelect($request)
{
$model = new self();
$per_page = 50;
$page = 1;
$order_by = $model->getKeyName();
$sort_by = 'asc';
if ($request->has('per_page')) {
$per_page = $request->input('per_page');
}
if ($request->has('sortBy')) {
$order_by = $request->input('sortBy');
}
if ($request->has('sortByAsc')) {
$sort_by = $request->input('sortByAsc');
}
if ($request->has('page')) {
$page = $request->input('page');
}
return $model->when($request->has('fields'), function ($query) use ($request) {
self::prepareSelectColumns($query, $request->input('fields'));
})->when($request->has('includes'), function ($query) use ($request) {
self::prepareIncludedTables($query, $request->input('includes'));
})->whereSearch($request->input('search'))
->orderBy("{$order_by}", "{$sort_by}")
->paginate($per_page, null, null, $page);
}
【问题讨论】:
-
你能把代码贴在你的分页发生的地方吗? Laravel 没有集合的分页方法。
-
根据您的要求更新。基本上正常的分页显示了我想要的方式,但在集合中它改变了输出的格式,这将通过我的 api。
-
我相信返回是试图遵循 json api 规范。看看雄辩的资源:@987654321@。及规格:jsonapi.org
-
Adam 我开始认为您是对的,我已经能够删除链接和元数据,但我无法提取该信息并使用不同格式的该信息格式化我自己的集合返回.
标签: laravel rest laravel-5.6