查询构建器 - pivot table laravel

Query builder - pivot table laravel

如何从没有分配角色的数据库中仅获取 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 查询,您可以做到这一点。

基本上这试图做的是让所有用户在 user_has_roles table 中找不到它的 id (意味着它没有任何关系)

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

您可以在那里尝试其他选择。