Laravel 10中如何在一对多关联中随机获取问题及选项
解决方案
首先纠正视图中的错误:你在循环选项时误写了变量名,应该用循环内的单个问题实例$question,而不是集合$Questions,修改后的视图代码如下:
@foreach($Questions as $question) {{$question->DbQuestions}} @foreach($question->Option as $option) {{$option->DbOptions}} @endforeach @endforeach
接下来实现选项的随机排序,有两种常用方式:
方式一:仅在当前查询中随机选项
在控制器的关联预加载中,通过闭包给Option添加随机排序逻辑,这样只有这次查询的选项是随机的,不影响其他地方调用关联:
public function showQ(){ return view('my_view',[ 'Questions' => Question::inRandomOrder() ->with(['Option' => function($query) { $query->inRandomOrder(); }]) ->get(), ]); }
方式二:全局关联返回随机选项
如果希望每次获取Question的Option关联时,选项都是随机排序的,可以直接修改Question模型的关联方法:
public function Option(): HasMany { return $this->hasMany(Option::class)->inRandomOrder(); }
这样控制器代码无需修改,保持你原来的写法即可,每次获取的选项都会自动随机排序。
内容的提问来源于stack exchange,提问作者Albert Ndizeye
相关产品推荐
相关产品推荐

