Laravel中如何实现登录后查询同部门员工信息?
解决Laravel中登录用户展示同部门员工的查询问题
首先咱们得先揪出你之前查询失效的原因:你写的where('seksyen','=','Auth(section)')是把Auth(section)当成了一个固定字符串,Laravel根本不会解析它来获取登录用户的部门信息,这就是查不到数据的核心问题。
下面给你两种贴合需求的正确实现方式,你可以根据实际场景选择:
方式一:仅查询同部门员工(无需关联用户表)
如果只是要展示同部门的员工详情,不需要用户表的额外信息,直接用当前登录用户的部门去筛选staffs表就足够了:
// 先获取当前登录用户的部门(记得确保用户已登录,可通过auth中间件保护路由) $currentUserSection = Auth::user()->section; // 查询与当前用户同部门的员工 $data['data'] = DB::table('staffs') ->where('seksyen', $currentUserSection) ->get();
方式二:关联用户表查询(如需用户表字段)
如果需要同时获取用户表的相关信息(比如用户的类型、登录邮箱等),可以用关联查询,但要注意字段的匹配逻辑:
$currentUserSection = Auth::user()->section; $data['data'] = DB::table('staffs') // 通过部门字段关联users表 ->join('users', 'users.section', '=', 'staffs.seksyen') // 筛选当前用户部门的员工 ->where('staffs.seksyen', $currentUserSection) // 可选:指定查询字段,避免字段名冲突(比如users和staffs都有邮箱类字段) ->select('staffs.*', 'users.name as user_name', 'users.email as user_email') ->get();
额外注意事项
- 登录验证:一定要确保访问该页面的用户已经登录,你可以给路由加上
auth中间件,或者在控制器里先判断if (auth()->check()),否则Auth::user()会返回null,直接导致报错。 - 字段一致性:确认users表的
section字段和staffs表的seksyen字段存储的部门标识是完全一致的(比如都是"A"、"B"这样的格式,没有大小写或拼写差异),否则关联筛选会失效。
内容的提问来源于stack exchange,提问作者joun
相关产品推荐
相关产品推荐

