如何从没有分配角色的数据库中获取users
?
用户属于许多角色,确切的关系是:
public function roles() {
return $this->belongsToMany(Role::class, 'user_has_roles', 'user_id', 'role_id');
}
我的问题是,我只使用Query builder
,而不是使用模型,因此我不想使用关系。
编辑:
我正在使用迁移,因此在使用模型时请不要使用解决方案。
答案 0 :(得分:1)
您可以使用doesntHave
,我相信这只会使用QueryBuilder
。
User::doesntHave('roles')->get();
参考:https://laravel.com/docs/5.6/eloquent-relationships
<强>更新强>
使用原始SQL查询,您可以执行此操作。
基本上,尝试做的是让所有用户在id
表中找不到user_has_roles
(意味着它没有任何关系)
SELECT *
FROM users
WHERE id NOT IN (SELECT user_id FROM user_has_roles)
我认为您可以将其转换为 JOIN 或其他内容。我不是原始SQL专家。
更新尝试查询生成器
$usersWithoutRoles = DB::table('users')
->whereNotIn(function ($query) {
$query->select(DB::raw('user_id'))
->from('user_has_roles')
->whereRaw('user_has_roles.user_id = users.id');
})
->get();
参考:SQL - find records from one table which don't exist in another
您可以尝试其他替代方案。