#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, очень признателен.