Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询生成器-透视表laravel_Laravel_Query Builder - Fatal编程技术网

查询生成器-透视表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();