我如何只users
从没有分配角色的数据库中获取?用户属于多个角色,确切的关系是:
public function roles() {
return $this->belongsToMany(Role::class, 'user_has_roles', 'user_id', 'role_id');
}
我的问题是,我只使用Query builder
,而不使用模型,所以我不想使用关系。
编辑:
我正在处理迁移,所以在使用模型时请不要解决方案。
你可以使用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();
您可以在那里尝试其他替代方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句