





После ответов на этот вопрос: Laravel — Красноречивые «Имеет», «С», «ГдеИмеет» — что они означают? Если я правильно понял, как устроена ваша модель данных:
$users = User::whereHas('roles', function($q){
$q->where('status', '1');
})
->where('email', $email)
->get();
Обновлено: я не доволен ответом выше, потому что в этом случае, насколько я понял, возвращенные пользователи не имеют уже загруженного списка ролей, поэтому я проверил документацию (https://laravel.com/docs/5.8/eloquent-relationships) и, учитывая то, что я нашел, следующий код должен делать то, что вы просите:
$users = User::with(['roles' => function ($query) {
$query->where('status', '1');
}])
->where('email', $email)
->get();
Я никогда не использовал ни eloquent, ни laravel, и я не разработчик php, поэтому я не мог попробовать этот фрагмент, пожалуйста, если он неверен, дайте мне знать.
Вы можете написать подзапрос, например
$result = User::select()
->with(['roles' => function($q){
$q->where('status', 1);
}])
->where('email', $email)
->get();
return $result;
Из любопытства, нужен ли select()? Должен ли я исправить свой ответ?
Как разработчик Laravel; Ты прав. Этот код будет извлекать пользователей с их ролями (нетерпеливая загрузка), но только тех пользователей, для которых запрос на роли возвращает true.