Как написать подзапрос в With()?

Мне нужно получить определенные данные, такие как таблица «ролей», которая подала положение дел, и мне нужно положение дел = 1, чтобы все данные были получены из таблицы ролей.

$result = User::select()
    ->with('roles')
    ->where('email', $email)
    ->get();
    return $result;
Стоит ли изучать 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-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
3
0
101
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

После ответов на этот вопрос: Laravel — Красноречивые «Имеет», «С», «ГдеИмеет» — что они означают? Если я правильно понял, как устроена ваша модель данных:

  • У пользователя много ролей
  • Роль имеет имущественный статус
  • Хотите отфильтровать по статусу = 1
$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, поэтому я не мог попробовать этот фрагмент, пожалуйста, если он неверен, дайте мне знать.

Как разработчик Laravel; Ты прав. Этот код будет извлекать пользователей с их ролями (нетерпеливая загрузка), но только тех пользователей, для которых запрос на роли возвращает true.

Douwe de Haan 12.04.2019 09:52
Ответ принят как подходящий

Вы можете написать подзапрос, например

$result = User::select()
    ->with(['roles' => function($q){    
         $q->where('status', 1);
    }])
    ->where('email', $email)
    ->get();
    return $result;

Из любопытства, нужен ли select()? Должен ли я исправить свой ответ?

Norcino 12.04.2019 17:08

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