2017-01-01 224 views
2

我有以下查询,从我的数据库获取随机的问题:Laravel - 不显示使用inRandomOrder()两次相同的记录

$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随机问题。

任何想法?

+0

我想你必须找到一种方法来匹配已经回答了一个数组中检索到的随机查询。如果在其中,则忽略,否则显示给用户。如果您可以执行“ifExist”这样的操作,那么您可以在列中查看一些数据,如果有,请拔出,否则再试一次。 – Rexford

回答

2

您可以使用whereDoesntHave()排除问题,其用户已经拥有的

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

我一直在使用你以前的答案,使用'whereNotIn('id',$ questions)'而且它做到了。我的'$ questions'是用户已经拥有的所有问题的列表。我无法理解你的更新答案,以及它是否可以表现更好。 – TheUnreal

+0

是的,新答案更具可读性我猜,但'whereNotIn()'也可以工作,如果你已经有用户问题的ID。很高兴帮助。 ) –

相关问题