Объяснение:
with()
используется для ускорения загрузки.Таким образом, в основном использование with('userRole')
даст вам все роли для этого конкретного пользователя.
Когда вы используете:
User::with(["userRole" => function ($query){
return $query->where('role_id', 1);
}])->get();
Вы говорите Laravel, дайте мне всех пользователей и их роли, но роливыбранный должен иметь только role_id
из 1
.Не выбирайте роли, отличные от этого условия.
В Laravel есть функция whereHas
, которая ничего не выбирает, но фильтрует родительские отношения на основе состояния ребенка.
Например.нам нужно получить пользователей с идентификатором роли 1:
User::wherehas('userRole', function ($q) {
return $q->where('role_id','1');
})->get();
Теперь Laravel скажет, чтобы я получил всех пользователей, у которых по крайней мере 1 запись userRoles с role_id 1
.
Thisбудет просто фильтровать пользователей на основе соотношения ролей.Однако нам нужно отдельно добавить предложение with()
, чтобы получить роли.
User::with('userRole')->wherehas('userRole', function ($q) {
return $q->where('role_id','1');
})->get();