У меня есть следующие таблицы, и я хочу выполнить левое соединение с условием и другим внутренним соединением из левой объединенной таблицы,
Пользовательская таблица
id | name 1 john 2 sam 3 cecil
Таблица ролей
id | name 1 admin 2 editor
таблица model_has_roles
role_id | model_type | model_id 1 App\User 1 2 App\User 2
Что я хочу
Выполните левое соединение между пользовательской таблицей и таблицей model_has_roles в столбцах user.id и model_has_roles.model_id, если model_type — «Приложение\Пользователь», а затем еще одно внутреннее соединение между таблицей ролей и таблицей model_has_roles для столбцов role_id и Roles.id. Таким образом, результат должен быть таким,
id | name | role 1 john admin 2 sam editor 3 cecil -
Я пробовал следующий запрос, но не работал правильно,
DB::table('users')->select('id', 'name', 'email', 'created_at', 'role_id')
->leftJoin('model_has_roles', 'model_has_roles.model_id', '=', 'users.id')
->where('model_has_roles.model_type', '=', 'App\User')
->paginate(1);
Если вы можете, пожалуйста, помогите мне написать красноречивый запрос для этого.
Спасибо
PS: На самом деле, я использую spatie/laravel-permission и пытаюсь получить всех пользователей с их именем роли.
Что произойдет, если у меня будет около 50 пользователей и я захочу вызвать этот метод 50 раз при перечислении всех пользователей? Приведет ли это к снижению производительности? Это то, о чем я думал






Это должно работать нормально:
App\User::with('roles')->get();
Да ты меня спас!! Это сработало для меня, $roles = Role::all(); $users = User::with('roles')->paginate(1);
Почему вы не используете их встроенные функции, такие как
$user->getPermissionsViaRoles();?