Laravel 5.4关联关系分页

3

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

当在第一页上分页 Eloquent 结果时,它返回 7 个未回答的问题(带有空的关联),以及 3 个已回答的问题,但我需要它返回总共 10 个问题中有 5 个带答案和 5 个没有答案。

现在我正在这样做:

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

有没有办法始终返回5个已回答/5个未回答,而不是随机的?

好的,为此制作一个查询,在MySQL中找出查询,然后将其转换为Laravel。 - Indra
1个回答

1

paginate()方法返回一个LengthAwarePaginator对象,因此您可以按照文档中的建议创建自己的分页器。也许(我没有测试过),您可以像这样做:

$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());否则链接将无法工作。 - John
抱歉,我的错。我做了一些更改来修复重复问题。如果需要,我还加入了另一种设置路径的方法。 - Yohanes Gultom

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