Когда я загружаю отношения с помощью красноречивых методов, некоторые записи имеют пустые отношения. Я могу отфильтровать записи, просто используя метод фильтра коллекции. Как я могу отфильтровать эти записи при запросе?
У меня несколько пользователей, и у каждого пользователя может быть несколько ролей (Администратор, Сотрудник, Пользователь). В сценарии я хочу перечислить всех пользователей, которые имеют роли сотрудника. Я нетерпеливо загружал роли (ограниченные сотрудником) для пользователей. Но пользователи без роли сотрудника также присутствовали в результирующих данных.
Таким образом, я должен либо отфильтровать эти данные, используя метод сбора данных, либо пропустить загрузку с нетерпением и использовать «отношение запросов». Но тогда это может занять много времени, если количество пользователей увеличится в базе данных.
//filtering out in collection
$employees = User::with(['roles'=> function($query){
$query->where('name', 'Employee');
}])->get()->filter(function($value, $key){
return $value->roles->count() > 0;
});
//querying relationship
$employees = User::whereHas('roles', function($query){
$query->where('name', 'Employee');
})->get();
Я также пытался использовать 'with' и 'whereHas' вместе. Но использование того же самого в другом большом наборе данных заняло больше времени, чем использование «with». Так что я просто отбросил эту опцию.
Итак, есть ли способ получить только тех пользователей, у которых есть роли сотрудников, если они использовали 'with'?