Laravel 5.4分页与关系

时间:2018-11-15 10:39:44

标签: laravel pagination

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

在第一页上对雄辩的结果进行分页时,它会返回说7个未回答的问题(具有空关系)和3个回答的问题,但是我需要它返回5个有答案的问题和5个无答案的答案。

现在我正在这样做:

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

有没有办法总是返回5个已回答/ 5个未回答?

1 个答案:

答案 0 :(得分:0)

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);