2017-10-12 3 views
1

Je voudrais obtenir tous les questionnaires avec les sujets qui ont un course_id:Laravel requête de relation éloquente ne fonctionne pas

Le modèle Topic a la fonction suivante:

public function quizzes() 
{ 
    return $this->hasMany('App\Quiz'); 
} 

Le modèle Quiz a les éléments suivants fonction:

public function topic() 
{ 
    return $this->belongsTo('App\Topic', 'topic_id'); 
} 

Ceci est le code dans ma fonction de contrôleur:

$topics = Topic::with('quizzes')->whereCourseId($course_id)->orderBy('created_at', 'asc')->get(); 

return dd($topics->quizzes); 

Je reçois l'erreur Exception suivante:

Property [quizzes] does not exist on this collection instance. 

me semble ne pas savoir ce qu'il se passe?

Répondre

1

Il est parce que vous voulez obtenir quizzes de collection non d'un modèle si boucle sur cette collection comme ceci:

foreach ($topics as $topic) { 
    $topics->quizzes; // <- this is fine :) 
} 

à des fins de débogage vous pouvez le faire comme ceci:

dd($topics->fist()->quizzes); 

Pour le deuxième besoin, vous pouvez le faire comme ceci:

$quizzes = Quizzes::whereHas('topic', function ($query) use ($course_id) { 
     $query->where('course_id', $course_id); 
    })->get(); 
+0

Y at-il un moyen d'obtenir les sujets sans la boucle? Je voudrais obtenir la liste des questionnaires à la fois? – Valentine

+0

Ce n'est pas ce que vous avez demandé: p Vous voulez que la liste de tous les quiz ayant un sujet avec un ID de cours soit vraie? – Maraboc

+0

Oui c'est ce que je voudrais. Vous avez des idées? – Valentine