У меня есть запрос, где я получаю всех пользователей с определенными ролями, и он работает нормально, теперь мне нужно исключить тех пользователей, которые уже были сохранены в третьей таблице, и просто вернуть пользователей без строки в третьей таблице.
Logi c
- Таблица пользователей (
user has many roles
, user hasOne manager
) - Таблица ролей (
role belongsTo user
) - Таблица менеджеров (
managers belongsTo user
)
Первый раз
Пользователь с ролью manager
Я возвращаю их всех. (скажем, 2 пользователя)
Я сохраняю одного из них в managers
таблице.
Второй раз
Пользователь с ролью manager
Я возвращаю их все.
Я сохраняю один из них в managers
таблице.
Выпуск
Во второй раз я должен получить только пользователя 1
, как раньше сохранил один из них в managers
таблицу. Но с моим текущим кодом у меня все еще есть 2 пользователя.
Код
$users = User::whereHas("roles", function($q) {
$q->where("name", "manager");
})->get();
SQL Вывод кода выше:
"select * from `users` where exists (select * from `roles` inner join `model_has_roles` on `roles`.`id` = `model_has_roles`.`role_id` where `users`.`id` = `model_has_roles`.`model_id` and `model_has_roles`.`model_type` = ? and `name` = ?) and `users`.`deleted_at` is null"
Есть идеи?