Laravel - 使用inRandomOrder()不要两次显示相同的记录

时间:2017-01-01 14:04:26

标签: laravel eloquent

我有以下查询从我的数据库中获取随机问题:

$q = Question::inRandomOrder()->first();

我生成的每个问题都保存在user_questions,结构如下:

id | question_id | user_id

我的目标是使用上面的雄辩查询生成随机问题,并排除用户已有的所有问题。

例如,如果我的user_questions表中有以下记录:

1 | 133 | 234
2 | 134 | 234
3 | 543 | 234

返回随机问题的查询,不包括 133,134和543

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用whereDoesntHave()排除用户已有的问题:

$randomQuestion = Question::whereDoesntHave('users', function($q) use($userId) {
         $q->where('id', $userId);
    })
    ->inRandomOrder()
    ->first();