如何在WHERE条件中校验当前登录用户ID?
实现当前登录用户Admin身份校验的方案
针对你的需求,这里提供几种基于ORM和原生SQL的实现思路,核心是同时关联角色模型并校验当前登录用户ID:
1. 基于模型关联的实例判断(以Eloquent为例)
假设你有User和Role两个模型,且User通过role_id关联到Role:
首先在User模型中定义关联:
class User extends Model { public function role() { return $this->belongsTo(Role::class); } }
然后在User模型内实现isAdmin()方法:
public function isAdmin() { // 直接通过当前用户实例的关联角色判断,自动绑定当前用户ID return $this->role->name === 'Admin'; }
调用时只需拿到当前登录用户实例:
$isAdmin = auth()->user()->isAdmin();
2. 通过查询构造器关联校验
如果需要直接通过查询判断存在性(不依赖用户实例):
public function isAdmin() { $currentUserId = auth()->id(); // 获取当前登录用户ID return User::whereHas('role', function ($query) { $query->where('name', 'Admin'); // 校验角色为Admin }) ->where('id', $currentUserId) // 校验用户ID为当前登录用户 ->exists(); // 判断是否存在符合条件的记录 }
3. 原生SQL实现
如果直接用原生SQL,逻辑类似:
SELECT EXISTS( SELECT 1 FROM users u INNER JOIN roles r ON u.role_id = r.id WHERE r.name = 'Admin' AND u.id = ? -- 这里?替换为当前登录用户ID ) AS is_admin;
核心逻辑总结:
- 确保用户模型与角色模型的关联关系正确配置
- 同时添加两个筛选条件:角色为Admin、用户ID匹配当前登录用户
- 通过
exists()或SQL的EXISTS语法判断是否存在符合条件的记录
内容的提问来源于stack exchange,提问作者perh23
相关产品推荐
相关产品推荐

