我有两个表users
和questions
questions
表中有5000多个问题,用户可以查看。
我希望一个用户一次只能查看一次随机问题,
用户查看问题后,该特定用户不应再次查看该问题。
users
表的示例:
id | name | email
-------------------------
1 | John Doe | abc@example.com
2 | Mary | def@example.com
questions
表的示例:
id | title | description
-------------------------
1 | ABC | Some dsc
2 | DEF | Some dsc
因此,我创建了另一个名为skips
的表,该表存储了已查看的question_id
和user_id
表具有user_id
和question_id
列
skips
表的示例:
id | user_id | question_id
-------------------------
1 | 1 | 1
2 | 1 | 2
例如:编号user_id
的{{1}}已经查看了ID为1和2的两个问题
现在这是我的问题
我如何在Laravel中向用户显示以前无法使用雄辩的关系查看的问题?
答案 0 :(得分:1)
您可以使用whereNotIn()
并提供一个子查询,您可以在其中选择用户已回答的所有问题。
Questions::whereNotIn('id', \DB::table("skips")
->select("question_id")
->where("user_id", \Auth::id()))
->toArray()
->random();
如果您正确定义了一个称为“跳过”的关系(获得已回答的问题),则可以使用doesntHave()
,
Questions::doesntHave('skips')->random();
答案 1 :(得分:1)
我通过以下方式实现了这一目标
Question::whereNotIn('id', Skip::where('user_id', Auth::user()->id)
->get('question_id'))
->get()
->random();
答案 2 :(得分:0)
在laravel中,有很多方法可以达到您想要的结果。关系是最好的解决方案。
$skip = Skips::where('user_id', $user_id)->select('question_id')->toArray();
$questions = Questions::select(*)->whereNotIn('question_id', $skip)->toArray();