如何在Laravel API中使用分页?

5
我的问题:我正在使用laravel开发简单的API,需要使用分页功能。我之前使用Cursors实现这个功能。但是即使我的模型返回了结果,也没有显示任何结果。

我的代码:

$newCursor = $groups->last()->id;
$cursor = new Cursor($cursor, $previousCursor, $newCursor, $groups->count());

//dd($cursor);

$groups =  new Collection(fractal($groups, new GroupRequestTransformer('filtered')));
$groups->setCursor($cursor);

$data = [
    'groups' => $groups,
    'cursor' => $cursor
 ];

$this->setResponseStatus(true, 200, trans('group.filtered'));
return $this->sendResponseData($data);

注意:$groups包含从模型返回的值。如果我dd($cursor);,我会得到
Cursor {#403
  #current: "5"
  #prev: null
  #next: 13
  #count: 1
}

看起来一切都没问题。但是我发送的实际响应$data为空。

"data": {
    "groups": {},
    "cursor": {}
  }

我在这里缺少什么?


你不能使用 Laravel 的原生分页吗? - Hammerbot
它在API中工作吗?我如何发送“下一页”链接? - Sayantan Das
是的,它可以正常工作,它会自动生成一个包含所有所需数据的JSON响应,只需尝试从控制器返回您的Eloquent模型:return User::paginate(10); - Hammerbot
我正在使用transformers,如果我想为分页添加一个单独的键,那么我该如何从$user对象中获取与分页相关的值? - Sayantan Das
1个回答

1
使用分形的分页器实例来格式化分页集合,不需要使用光标,在他们网站上的示例如下。
use League\Fractal\Resource\Collection;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use Acme\Model\Book;
use Acme\Transformer\BookTransformer;

$paginator = Book::paginate();
$books = $paginator->getCollection();

$resource = new Collection($books, new BookTransformer);
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));

请点击这里查看 http://fractal.thephpleague.com/pagination/

或者使用laravel-fractal这个方便的包,它支持各种分页和其他功能。 https://github.com/spatie/laravel-fractal


当我们有大量数据集并且运行 SELECT COUNT(*) FROM whatever 不是一个可选项时,这就是为什么我想使用游标的原因。 - Sayantan Das
我建议使用laravel-fractal,我已经处理过超过20万行数据,它不会产生任何问题,分页工作正常。 - Sagar Rabadiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接