查询生成器 - 数据透视表laravel

时间:2018-02-19 21:43:12

标签: laravel query-builder

如何从没有分配角色的数据库中获取users? 用户属于许多角色,确切的关系是:

public function roles() {
    return $this->belongsToMany(Role::class, 'user_has_roles', 'user_id', 'role_id');
}

我的问题是,我只使用Query builder,而不是使用模型,因此我不想使用关系。

编辑:

我正在使用迁移,因此在使用模型时请不要使用解决方案。

1 个答案:

答案 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

您可以尝试其他替代方案。