查询构建器 - 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
您可以在那里尝试其他选择。
如何从没有分配角色的数据库中仅获取 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
您可以在那里尝试其他选择。