不理解if/else语句使用条件 如何修改Laravel查询按登录用户展示工单
实现方案
1. 核心调整逻辑
你现有的查询已经完成了工单、分类、用户组、用户的关联配置,只需要新增对应筛选条件,即可实现按当前登录用户展示对应工单。Laravel中可以通过auth()->id()快速获取当前登录用户的ID。
2. 常见场景代码实现
场景1:展示当前用户所属组有权限查看的所有工单
// 先获取当前登录用户ID,调用前建议先判断用户是否已登录,避免返回空值 $currentUserId = auth()->id(); $tickets = Ticket::select("tickets.cust_id","tickets.ticket_id","tickets.category_id","tickets.subject","tickets.priority","tickets.message","tickets.status","tickets.createdticket","tickets.last_reply","tickets.closing_ticket","tickets.auto_close_ticket","tickets.created_at","tickets.updated_at","groups_categories.group_id","groups_users.users_id") ->leftJoin('groups_categories','groups_categories.category_id','tickets.category_id') ->leftJoin('groups_users','groups_users.groups_id','groups_categories.group_id') // 新增筛选:仅返回关联了当前用户ID的组对应的工单 ->where('groups_users.users_id', $currentUserId) // 若工单可能关联多个组,加distinct避免重复返回同一条工单 ->distinct() ->get();
场景2:展示当前用户自己提交的工单
仅需替换筛选条件为匹配工单的提交人ID即可:
->where('tickets.cust_id', $currentUserId)
3. 结合if/else实现多场景切换
如果你需要根据不同条件切换展示规则(比如前端传参控制看自己提交的还是组内的工单),可以参考下面的if/else用法:
$currentUserId = auth()->id(); // 读取前端传的type参数,默认值为1 $listType = request()->get('type', 1); // 先初始化基础查询 $query = Ticket::select("tickets.cust_id","tickets.ticket_id","tickets.category_id","tickets.subject","tickets.priority","tickets.message","tickets.status","tickets.createdticket","tickets.last_reply","tickets.closing_ticket","tickets.auto_close_ticket","tickets.created_at","tickets.updated_at","groups_categories.group_id","groups_users.users_id") ->leftJoin('groups_categories','groups_categories.category_id','tickets.category_id') ->leftJoin('groups_users','groups_users.groups_id','groups_categories.group_id'); // 判断展示规则 if ($listType == 1) { // 条件成立时执行:筛选用户自己提交的工单 $query->where('tickets.cust_id', $currentUserId); } else { // 条件不成立时执行:筛选组内有权限的工单 $query->where('groups_users.users_id', $currentUserId)->distinct(); } // 执行查询获取结果 $tickets = $query->get();
注意事项
- 调用
auth()->id()前建议先通过auth()->check()判断用户是否登录,避免未登录场景下返回null导致查询结果为空 - 如果你的用户ID字段名不是默认的
id,可自行调整auth()->id()为对应取值方法
内容的提问来源于stack exchange,提问作者rajender
相关产品推荐
相关产品推荐

