【问题标题】:Laravel 5: LengthAwarePaginator returned JSON not arrayLaravel 5:LengthAwarePaginator 返回的 JSON 不是数组
【发布时间】:2016-08-02 14:32:03
【问题描述】:

我从 LengthAwarePaginator 返回 JSON,但 JSON 的 data 属性不是数组。我需要它是一个数组。有什么想法吗?

// grab query parameters
$pageNumber = $request->input('page');
$pageSize = $request->input('pageSize');
// if query params do not exist call with defaults
if(!$pageNumber) {
  $pageNumber = 1;
}

if(!$pageSize) {
  $pageSize = 5;
}

$offset = ($pageNumber * $pageSize) - $pageSize;
// slice full array data based on page number and page size
$itemsForCurrentPage = array_slice($arrayOfData, $offset, $pageSize, true);
return new LengthAwarePaginator($itemsForCurrentPage, count($this->orgUsers), $pageSize, $pageNumber);

返回数据:

{
"total": 30,
"per_page": 5,
"current_page": 2,
"last_page": 6,
"next_page_url": "/?page=3",
"prev_page_url": "/?page=1",
"from": 6,
"to": 10,
"data": {
    "5": {
    "userId": "564110eadcb39832268ea873",
    "email": "dsdfgdfg@il.com",
    "isActive": true,
    "firstName": "dsdfgdfg",
    "lastName": "dsdfgdfg",
    "permissionType": "dsdfgdfg"
    },
    "6": {
    "userId": "564110ea2169bc358a3b65c2",
    "email": "dsdfgdfg@d.com",
    "isActive": false,
    "firstName": "dsdfgdfg",
    "lastName": "dsdfgdfg",
    "permissionType": "dsdfgdfg"
    },
    "7": {
    "userId": "564110eaee662f30c4bd6772",
    "email": "dsdfgdfg@dsdfgdfg.com",
    "isActive": true,
    "firstName": "dsdfgdfg",
    "lastName": "dsdfgdfg",
    "permissionType": "dsdfgdfg"
    },
    "8": {
    "userId": "dsdfgdfg",
    "email": "dsdfgdfg@dsdfgdfg.com",
    "isActive": true,
    "firstName": "dsdfgdfg",
    "lastName": "dsdfgdfg"
    },
    "9": {
    "userId": "564110eaf9526eb5ddd673a4",
    "email": "dsdfgdfg@dsdfgdfg.com",
    "isActive": true,
    "firstName": "dsdfgdfg",
    "lastName": "dsdfgdfg"
    }
}
}

TIA

【问题讨论】:

  • 只需使用json_decode将json转换为数组
  • array_slice 中将true 更改为false

标签: laravel pagination


【解决方案1】:

问题是idsarray_slice-ing 时仍然是数组的键。但由于缺少某些键,尤其是 0, 1, 2, …,因此在编码为 json 时,数组将被视为关联 (['key1'=>'value1', 'key2'=>'value2', …]) 而不是数字索引 (['value1', 'value2', …])。

解决方案是通过array_values() 调用来接替您的array_slice(…)

return new LengthAwarePaginator(array_values($itemsForCurrentPage), count($this->orgUsers), $pageSize, $pageNumber);

编辑:如果您的 $arrayOfData 是 Eloquent/Illuminate Collection,您可以使用 ->slice($offset, $pageSize)->values() 方法。更好看!

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2015-04-30
    • 2015-12-09
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多