我使用以下方法随机收到问题:
public function mcq($id)
{
$questions = Chapter::find($id)->questions()->orderByRaw("RAND()")->paginate(1);
return view('pages.mcq')->withQuestions($questions);
}
如何避免重复问题。
答案 0 :(得分:2)
您可以尝试此inRandomOrder()
$questions = Chapter::find($id)->questions()->inRandomOrder()->get();
答案 1 :(得分:1)
使用随机排序时,您无法保持相同的结果。
如果你真的想让每个用户随机使用,但保持分页工作,你可以创建一个随机索引并将其保存在会话中。像这样:
Chapter::find(1)->questions()->whereIn('id', session('random')[$pageIndex])->get();
然后在每个页面使用它:
produce in this order and read like this
1 2 3 4 5
_ _ _ _ _
a b c d e 1 [a b c d e]
a b c d e 2 [a b c d e]
a b c d e --------> 3 [a b c d e]
z y x w v 4 [z y x w v]
g h i j k 5 [g h i j k]
_ _ _ _ _
答案 2 :(得分:0)
您可以将会话变量中当前提取的问题ID设置为数组。 下次当您查询会话数组的问题检查时,如果它存在,您可以在查询中传递这些ID
->whereNotIn('id', [1, 2, 3])
这样就不会重复了。
答案 3 :(得分:0)
你不能依赖雄辩来做到这一点,你必须添加一个验证层,你可以在会话中存储用户看到的问题,然后检查id是否在那个已经看到问题的数组中 通过使用这样的东西
session()->put('questions', array_merge(session('questions'), $id));
然后检查
Chapter::find($id)->questions()->whereNotIn('id',session('questions'))->inRandomOrder()->get();