所以,我有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);
});
}
Run Code Online (Sandbox Code Playgroud)
当我打电话User::doesntHaveRoles([1])->lists('name', 'id')来获取没有super角色的用户时,它会起作用并返回:
{"2":"Mike","3":"James","4":"Larry"}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试列出没有admin角色的用户时User::doesntHaveRoles([2])->lists('name', 'id'),肯定James没有在那里显示,但是Mike当他实际上有admin角色时出现了:
{"1":"John","2":"Mike","4":"Larry"}
Run Code Online (Sandbox Code Playgroud)
我认为这是因为 …