2017-01-01 32 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 

クエリ133134と543を除くランダムな質問を返します。

アイデア?

+0

私はあなたがすでに1に答えの配列に対して取得したランダムなクエリに一致する方法を見つける必要がありますね。その中にある場合は無視し、そうでない場合はユーザーに表示します。 '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

新しい答えはもっと読みやすいと思いますが、すでにあなたの質問のIDがあれば 'whereNotIn()'もうまくいきます。それが助けてくれてうれしい。 ) –

関連する問題