В красноречивом: Как получить модель, которая имеет количество связанных моделей ровно n с условием? - PullRequest
2 голосов
/ 07 марта 2019

В красноречивом выражении: как связать модель, в которой количество связанных моделей с условием равно n?

Здесь приведено упрощение проблемы, с которой я сталкиваюсь: -

В базе данных есть несколько курсов.В одном курсе много студентов.

Мне нужно пройти курсы с ровно 20 студентками.Итак, мне нужно сделать оба.Убедитесь, что количество студентов равно 20. И проверьте, что они являются женщинами.

Теперь я могу использовать либо «где», что не позволяет мне подсчитывать связанных студентов.На самом деле он только проверяет, есть ли хотя бы одна студентка.

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()
;

Что делать?

1 Ответ

4 голосов
/ 07 марта 2019

По Красноречивым связям Документация вы можете сделать примерно так:

Course
    ::whereHas('students',function($q){
        $q->where('gender','Female');
    }, '=', 20)
    ->get()
...