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

В красноречии: как связать модель, где количество связанных моделей с условием равно 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()
;

Что делать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В документации Красноречивые отношения вы можете сделать что-то вроде этого:

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

Ты только что спас мне жизнь.

Jasmeet Singh 08.03.2019 17:20

Другие вопросы по теме