所以我有一个具有多对多关系的
我认为这是因为Mike也拥有管理员角色,您是否在我的范围中看到了什么问题?或者您有其他解决方案吗?
谢谢
编辑:以下是我的枢轴模式。
角色模型
User
和 Role
模型,我有3个角色:super
、admin
和moderator
,还有4个用户: John
、Mike
、James
和 Larry
。
John
是 super
,Mike
有 admin
和 moderator
角色,James
是一个 admin
,Larry
是一个 moderator
。为了显示没有某些角色的用户,我创建了这个范围:public function scopeDoesntHaveRoles($query, $roles = [], $column = 'id') {
return $query->whereDoesntHave('roles')->orWhereHas('roles', function ($q) use ($roles, $column) {
$q->whereNotIn($column, $roles);
});
}
当我调用 User::doesntHaveRoles([1])->lists('name', 'id')
来获取没有超级角色的用户时,它可以正常运行并返回:
{"2":"Mike","3":"James","4":"Larry"}
但是,当我尝试列出没有admin
角色的用户时,User::doesntHaveRoles([2])->lists('name', 'id')
,是的,James
不在其中,但是实际上拥有admin
角色的Mike
却出现了:
{"1":"John","2":"Mike","4":"Larry"}
我认为这是因为Mike也拥有管理员角色,您是否在我的范围中看到了什么问题?或者您有其他解决方案吗?
谢谢
编辑:以下是我的枢轴模式。
Schema::create('user_roles', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->primary([
'user_id', 'role_id'
]);
});
User
模型
public function roles()
{
return $this->belongsToMany(Role::class, 'user_roles');
}
角色模型
public function users()
{
return $this->belongsToMany(User::class, 'user_roles');
}
roles
和users
表之间的数据透视表模式吗?如果你遵循惯例,应该在其中有一个role_id
列,你可以在这个列上调用whereNotIn
方法。 - shempignon