Как мне получить данные дочернего элемента дочернего элемента родителя? Laravel Eloquent

#laravel #laravel-5 #eloquent

#laravel #laravel-5 #eloquent

Вопрос:

Родительским элементом является Exam, дочерним элементом Exam является Question, а дочерним элементом Question является Choices

Я хотел отобразить все вопросы этого определенного экзамена (exam_id) с соответствующими вариантами выбора.

Модель экзамена

 public function questions()
{
    return $this->hasMany('AppQuestions');
}
  

Модель вопроса

 public function exams()
{
    return $this->belongsTo('AppExam', 'exam_id', 'exam_id');
}

public function choices()
{
    return $this->hasMany('AppChoice');
}
  

Модель выбора

 public function questions()
{
    return $this->belongsTo('AppQuestion', 'question_id', 'question_id');
}
  

В контроллере

 $all = Exam::with(['questions','questions.choices'])->where('exam_id', $examID)->get();
  

Кажется, я не получаю желаемого результата. Выдает ошибку класса ‘App Questions’ not found. Я только что запустил laravel, надеюсь, что кто-нибудь сможет мне помочь. Спасибо.

Ответ №1:

В модели экзамена $this->hasMany('AppQuestions' должно быть $this->hasMany('AppQuestion') одно небольшое заблуждение

 public function questions()
{
    return $this->hasMany('AppQuestion');
}
  

Я предлагаю вам использовать эту структуру

 public function questions()
{
    return $this->hasMany(Question::class);
}
  

Комментарии:

1. О, я не осознавал этого с самого начала. Однако я не получаю никаких результатов от вопросов или вариантов. Код, который у меня есть в контроллере (указанный выше), возвращает только данные экзамена. Вопросы пустые, даже если у меня есть вопросы внутри этого определенного экзамена. Что-нибудь не так с кодом?

2. На данный момент я вижу только эту часть. Вы должны добавить свою структуру БД, чтобы я мог видеть более подробные

3. Также показать Exam::with(['questions'])->where('exam_id', $examID)->get();

4. Также вы можете попробовать это public function exams() { return $this->hasMany('AppQuestion', 'exam_id', 'exam_id'); }

5. О, теперь я понял. Я должен поместить первичный и внешний ключи вместе return $this->hasMany . Большое спасибо @Davit, очень признателен.