查询生成器-透视表laravel
如何仅从数据库中获取未分配角色的查询生成器-透视表laravel,laravel,query-builder,Laravel,Query Builder,如何仅从数据库中获取未分配角色的用户? 用户属于多个角色,确切关系为: public function roles() { return $this->belongsToMany(Role::class, 'user_has_roles', 'user_id', 'role_id'); } 我的问题是,我只使用查询生成器,而不使用模型,因此我不想使用关系 编辑: 我正在处理迁移,所以请不要在使用模型时使用任何解决方案。您可以使用doesntHave,我相信这只使用QueryBui
用户
?
用户属于多个角色,确切关系为:
public function roles() {
return $this->belongsToMany(Role::class, 'user_has_roles', 'user_id', 'role_id');
}
我的问题是,我只使用查询生成器
,而不使用模型,因此我不想使用关系
编辑:
我正在处理迁移,所以请不要在使用模型时使用任何解决方案。您可以使用
doesntHave
,我相信这只使用QueryBuilder
User::doesntHave('roles')->get();
参考:
更新
使用原始SQL查询,您可以做到这一点
基本上,它试图做的是获取在user\u has\u roles
表中找不到其id
的所有用户(这意味着它没有任何关系)
我想你可以把它转换成一个连接之类的东西。不过,我不是原始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();
参考:
您可以在那里尝试其他选择。谢谢您的建议,但我正在处理迁移,我无法使用模型。在这种情况下,您必须创建一个本机查询。我已经更新了我的答案,请注意,它只获取,不插入(因为您的问题中没有包含)。我相信它可以进一步优化。哦,我忘记了我的问题,我真正要求的是什么,我在答案中公布了整个问题,对此表示抱歉。不管怎样,你的代码就是我需要的,谢谢:)
$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();