Как написать подзапрос в With ()? - PullRequest
3 голосов
/ 12 апреля 2019

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

$result = User::select()
    ->with('roles')
    ->where('email', $email)
    ->get();
    return $result;

Ответы [ 2 ]

3 голосов
/ 12 апреля 2019

После ответов на этот вопрос: 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, поэтому я не смог попробовать этот фрагмент, пожалуйста, если он неверный, дайте мне знать.

2 голосов
/ 12 апреля 2019

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

$result = User::select()
    ->with(['roles' => function($q){    
         $q->where('status', 1);
    }])
    ->where('email', $email)
    ->get();
    return $result;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...