#php #laravel #eloquent
Вопрос:
Предположим следующее, у меня есть:
Модель Курса:
belongsToMany
Модель пользователяbelongsToMany
Модель экзаменаHasMany
Модель вопросаHasMany
Модель Ответов
Таблица Результатов экзамена по курсу
id
user_id
course_id
exam_id
question_id
answer_id
Есть ли лучший способ получить результаты без необходимости прямого запроса таблицы?
В настоящее время я делаю следующее:
public function displayResult($user, $course, $exam) {
$course_exam_results = AppCourseExamResult::where([
'user_id' => $user->id,
'course_id' => $course->id,
'exam_id' => $exam->id
])
->get();
dd($course_exam_results);
}
Хотел бы сделать что-нибудь получше, например auth()->user()->course(??)->exam(??)->results
. Я думал об использовании laravel hasManyThrough
, но не думаю, что смогу заставить его работать в этом случае, так как он принимает только 2 модели, в то время как мне, возможно, придется вызывать 3-5 моделей одновременно.
Заранее спасибо.
Комментарии:
1. Вы здесь вообще не упомянули
Course
модель. Кроме того, если ответ относится к одному вопросу, а вопрос-к одному экзамену (и экзамен-к одному курсу?), Тоquestion_id, exam_id, course_id
может быть функционально определен тем,answer_id
какой тип подсказывает мне, что вам нужно переосмыслить то, как вы смоделировали свои модели результатов экзамена по курсу
Ответ №1:
Если вы хотите использовать несколько where
букв s в Laravel Eloquent, вы должны сделать, как показано ниже:
- Вы должны передать
where()
массиву. - Каждый поиск имеет два аргумента, поэтому он представляет собой массив в массиве.
$course_exam_results = AppCourseExamResult::where([
['user_id', auth()->user()->id],
['course_id', $course->id],
['exam_id', $exam->id]
])
->firstOrFail();