В красноречии: как связать модель, где количество связанных моделей с условием равно n?
Вот упрощение проблемы, с которой я сталкиваюсь: -
В базе несколько курсов. На одном курсе много студентов.
Мне нужно пройти курсы ровно с 20 студентками. Итак, мне нужно сделать и то, и другое. Убедитесь, что подсчет количества студентов равен 20. И проверьте условие, что они женского пола.
Теперь я могу либо использовать «wherehas», что не позволяет мне подсчитывать связанных студентов. На самом деле он проверяет только наличие хотя бы одной ученицы.
Course
::whereHas('students',function($q){
$q->where('gender','Female');
})
->get()
;
Или я могу использовать «имеет», что позволяет мне подсчитывать связанных студентов, но не позволяет мне проверить, являются ли они женщинами или нет.
Course
::has('students','=','20')
->get()
;
Мне нужно что-то, что позволит мне одновременно проверять количество студентов и проверять, все ли они женского пола. Что-то вроде этого нужно: -
// NOT ALLOWED IN ELOQUENT
Course
::has('students','=','20',function($q){
$q->where('gender','Female');
})
->get()
;
Что делать?






В документации Красноречивые отношения вы можете сделать что-то вроде этого:
Course
::whereHas('students',function($q){
$q->where('gender','Female');
}, '=', 20)
->get()
Ты только что спас мне жизнь.