You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不理解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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:09:04