在Laravel中获取随机数据而不重复

问题描述 投票:2回答:4

我通过使用以下方法随机获得问题:

public function mcq($id)
{
    $questions = Chapter::find($id)->questions()->orderByRaw("RAND()")->paginate(1);
    return view('pages.mcq')->withQuestions($questions);
}

如何避免重复问题。

laravel eloquent laravel-eloquent
4个回答
2
投票

你可以尝试这个inRandomOrder()

$questions = Chapter::find($id)->questions()->inRandomOrder()->get();

1
投票

使用随机排序时,您无法保持相同的结果。

如果你真的想让每个用户随机,但保持分页工作,你可以创建一个随机索引并将其保留在会话中。像这样的东西:

session(['random' => [[1, 18, 5], [4, 3, 8], [3, 9, 14], ....]]);

然后在每个页面使用它:

Chapter::find(1)->questions()->whereIn('id', session('random')[$pageIndex])->get();

你还需要manually create a paginator


0
投票

您可以将会话变量中当前提取的问题ID设置为数组。下次当您查询会话数组的问题检查时,如果它存在,您可以在查询中传递这些ID

 ->whereNotIn('id', [1, 2, 3])

所以它不会重复。


0
投票

你不能依赖雄辩来做到这一点,你必须添加一个验证层,你可以在会话中存储用户看到的问题,然后通过使用某些东西检查id是否不在已经看到的问题的数组中像这样

session()->put('questions', array_merge(session('questions'), $id));

然后检查

Chapter::find($id)->questions()->whereNotIn('id',session('questions'))->inRandomOrder()->get();
© www.soinside.com 2019 - 2024. All rights reserved.