Bonjour,

je suis entrain de créer un site de quiz limiter avec le temps.
et je veux quand l'utilisateur clique sur un bouton jouer lui affiche une seule question depuis ma base de données et la répond puis affiche une autre question aprés le click d'un autre button continuer.

j'ai essayer de les récupérer dans un premier temps avec :

$questions = DB::table('questions')
            ->join('question_options', 'questions.id', '=', 'question_options.question_id')
            ->join('categories', 'categories.id', '=', 'questions.categories_id')
            ->inRandomOrder()
            ->get();
        return view('content.JouerChampionQuiz', compact('questions'));

mais il m'affiche tous les questions à la fois. Et j'ai essaye aussi cette structure :

$question = Question::with('options')->first();

mais je récupere juste le premier élements dans la table.

je sais pas ai-je besoin à une boucle pour parcourir tous les linges de table question et afficher chaqu'un aprés le click du button next mais vraiment je sais pas comment je l'utilise

9 réponses


Bonjour.
Si tu utilisais first au lieu d'utiliser get dans ta première requête, peut être que tu ne récupèrerais qu'un seul résultat.

toto010
Auteur

mais comment je peux faire pour récupérer la deuxieme ligne

first ne veux pas dire la première ligne de la table, mais le premier enregistrement récupéré selon les autres méthodes utilisées, sinon quel serait l'intérêt d'utiliser la méthode inRandomOrder avec la méthode first ?
Si tu regardes bien dans la documentation, ils montrent un exemple où ils utilisent les deux méthodes ensembles, ils ne le feraient pas si first ne retournait que la première ligne de la table.
Où si tu préfères, tu n'as qu'a utiliser la méthode limit et lui définir 1, mais ça reviendrait au même que d'utiliser first.

toto010
Auteur

l'intérêt d'utiliser la méthode inRandomOrder est que Je veux récupéré un enregistrement aléatoire dans un premier temps et aprés le click d'un button next je veux récupéré un autre enregistrement.

Soit tu n'as pas compris ce que j'ai dis, ou alors tu n'as pas lui ma réponse en entier.
Je ne t'ai pas dit qu'il n'y avait aucun intérêt d'utiliser les deux méthodes ensembles, je te dis au contraire, que si la méthode first ne retournait que la première ligne de la table, que là ça n'aurait pas d'intérêt, mais ce n'est pas le cas.
Lis correctement les réponses que l'on te donne avant de répondre à côté, sinon autant que tu te débrouilles tout seul sans venir demander de l'aide.

toto010
Auteur

Merci pour votre aide, j'ai bien lu tes réponses c'est juste je voulais expliquer pourquoi je l'ai utilisé.

$question = DB::table('questions')
            ->join('question_options', 'questions.id', '=', 'question_options.question_id')
            ->join('categories', 'categories.id', '=', 'questions.categories_id')
            ->inRandomOrder()
            ->first();

OU

$question = Question::with('options')->inRandomOrder()->first();

Fait attention, il me semble que tu pourrais recuperer deux fois la meme question dans un quiz avec inRandomOrder()

toto010
Auteur

Merci tous pour votre aide.