Выберите модель, где связанные модели соответствуют критериям
У меня есть класс Student
и класс Exam
, Один студент может сдать много экзаменов, и один экзамен может принадлежать одному студенту. Мне нужно выбрать всех студентов, которые сдают экзамен по "английскому языку", поэтому я пытаюсь сделать следующее:
$english_students = Student::with('Exams')-whereHas('Exams', function($query){
//logic to return true if the student has a related Exam with name of "English";
})
Моя проблема в том, что у меня нет полного понимания того, что я могу или не могу сделать в закрытии.
3 ответа
Решение
$english_students = Student::with('Exams')-whereHas('Exams', function($query){
$query->where("name","English");
})->get();
Просто добавьте предложение where к функции обратного вызова:
$english_students = Student::with('Exams')->whereHas('Exams', function($query){
$query->where('name', 'English');
})->get();
Если вам тоже не нужно сдавать экзамены, используйте метод has:
$english_students = Student::has('exams', '=', 'English')->get();
Student::whereHas('Exams', function($q) use($examName) {
$q->where('name', $examName);
})
->get();
Кроме того, если вам не нужно загружать все студенческие экзамены, удалите with()
часть.