【问题标题】:Laravel 5.4 pagination with relationshipLaravel 5.4 分页与关系
【发布时间】:2018-11-15 22:46:25
【问题描述】:

我有两个表格问题和答案。问题表与答案表有关系。

在它返回的第一页上对雄辩的结果进行分页时,让我们说 7 个未回答的问题(空关系)和 3 个已回答的问题,但我需要它返回 5 个有答案和 5 个没有答案,总共 10 个。

现在我正在这样做:

Question::with(['user', 'answers])->paginate(10);

有什么方法可以返回总是 5 个回答/5 个未回答而不是随机的?

【问题讨论】:

  • 是的,对此进行查询,找出 MySQL 中的查询,然后将其翻译成 laravel

标签: laravel pagination


【解决方案1】:

paginate() 方法返回一个LengthAwarePaginator 对象,因此您可以按照the doc 的建议创建自己的对象。也许(我还没有测试过)你可以或多或少地这样做:

$limit = $request->input('limit', 5);
$page = $request->input('page', 1);
$total = Question::count();
$offset = ($page - 1) * $limit;

$items1 = Question::with(['user', 'answers'])->has('answers')->limit($limit)->offset($offset)->get();
$items2 = Question::with(['user', 'answers'])->doesntHave('answers')->limit($limit)->offset($offset)->get();

$paginator = new \Illuminate\Pagination\LengthAwarePaginator(
    $items1->concat(items2),
    $total,
    $limit,
    $page,
    ['path' => $request->getPathInfo()]
);

return response()->json($paginator); 

【讨论】:

  • 它几乎可以工作,但由于某种原因在第二页返回第一页的重复项。我还必须添加 $paginator->setPath($request->getPathInfo());或链接不起作用。
  • 起来,我的错。我做了一些改变来解决重复的问题。如果有必要,我还采用了替代方法来设置路径
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2018-01-22
  • 2017-10-17
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多