astralo
@astralo
для "спасибо" есть кнопка [Нравится]

Как правильно написать SQL запрос?

Привет.
Есть три таблицы:
- users с полями id, name
- roles с полями id, title
- user_roles - связка многий ко многим users и roles c полями user_id, role_id

соответственно, у определенного юзера, может быть несколько ролей.
Задача банальна - требуется запрос для выборки id юзеров, у которых нет определенной роли, к примеру, выборка всех, кто не входит в группу админов.

Возможно, кто то знает как это сделать просто на laravel 5 ?
  • Вопрос задан
  • 418 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
select * from users where id not in (select user_id from user_roles join roles on role_id = roles.id where roles.title='админ')

select * from users where not exists (select user_id from user_roles join roles on role_id = roles.id where roles.title='админ' and user_id = users.id)

select * from users left join (user_roles, roles) ON (role_id = roles.id and user_id = users.id and roles.title='админ') where user_id is null
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AmdY
@AmdY
PHP и прочие вебштучки
Не надо городить sql, на eloquent всё просто и витебельно.
Получаем всех пользователей (User) у которых (whereHas) ролей с именем admin (where('name', 'admin')) меньше 1.
$users = User::whereHas("role", function($q) {
  $q->where('name', 'admin');
}, '<', 1)->get();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы