laravel 5 分页 json 数据集

laravel 5 paginating json data set

控制器代码:http://laravel.io/bin/1yYrw
查看代码:http://laravel.io/bin/kWlaX

我目前正在从一个 guzzle api 请求中提取一组数据。我的第 28 行变量 $transactions returns 这个数据集:

[
   {
      "game":"Fantasista",
      "package":"Fantasista 10 Dollca",
      "date":"2015-04-21T10:23:44.000Z"
   },
   {
      "game":"Fantasista",
      "package":"Fantasista 10 Dollca",
      "date":"2015-04-21T10:21:43.000Z"
   },
   {
      "game":"MagicBoxAsia",
      "package":"MOL Points Inter Wallet 500 MB Coins",
      "date":"2015-04-21T10:19:31.000Z"
   },
   {
      "game":"MagicBoxAsia",
      "package":"MOL Points Inter Wallet 500 MB Coins",
      "date":"2015-04-21T10:18:10.000Z"
   },
   {
      "game":"Fantasista",
      "package":"Fantasista 10 Dollca",
      "date":"2015-04-21T07:51:35.000Z"
   },
   {
      "game":"MagicBoxAsia",
      "package":"Thai ePay 500",
      "date":"2015-04-21T07:41:13.000Z"
   },
   {
      "game":"MagicBoxAsia",
      "package":"Thai ePay 1000",
      "date":"2015-04-21T07:38:08.000Z"
   },
   {
      "game":"MagicBoxAsia",
      "package":"Thai ePay 50",
      "date":"2015-04-21T07:35:50.000Z"
   },
   {
      "game":"MagicBoxAsia",
      "package":"Thai ePay 150",
      "date":"2015-04-21T07:23:24.000Z"
   },
   {
      "game":"MagicBoxAsia",
      "package":"Boonterm 150",
      "date":"2015-04-21T07:06:38.000Z"
   },
   {
      "game":"MagicBoxAsia",
      "package":"Thai ePay 50",
      "date":"2015-04-21T06:43:54.000Z"
   }
]

但是,当使用 foreach 循环在视图中分页和显示时,将显示所有 11 个项目而不是分页。当我将每页值从 6 更改为 2 时,$->render() 滑块似乎明白生成了更多页面,但所有项目仍显示在同一页面上。

您在分页 class 上调用 foreach,它在所有项目上实现 ArrayIterator [1]。我认为您可能要做的是在集合本身上使用 forPage [2] 方法(Paginator 上不存在的任何方法都会传递给集合 [3]),传入页码和每页数你要。

@foreach ($paginator->forPage($paginator->currentPage(), $paginator->perPage())
    ...
@endforeach

[1] https://github.com/illuminate/pagination/blob/master/AbstractPaginator.php#L374
[2] https://github.com/illuminate/support/blob/master/Collection.php#L413
[3] https://github.com/illuminate/pagination/blob/master/AbstractPaginator.php#L461

这样做

 $collection = new Collection($response['data']), true));

 $currentPage = Paginator::resolveCurrentPage();

 $per_page = 6;

 $currentPageResults = $collection->slice(($currentPage - 1) * $per_page, $per_page)->all();

 $paginator = new Paginator($currentPageResults, count($collection), $per_page);

 $paginator->setPath($request->url());