如何基于user_id统计通知?解决全员计数相同问题
按用户维度统计通知数量的实现方案
问题分析
当前代码查询的是所有状态为2的Support记录,导致所有成员看到的通知计数完全一致,无法实现基于user_id的个性化统计。结合你提供的数据库表结构(包含user_id字段),我们需要修改查询逻辑,关联当前登录用户的ID来过滤数据。
代码修改方案
1. 调整查询逻辑
将原查询改为仅统计属于当前登录用户且状态为2的Support记录,同时优化性能:
@php use Illuminate\Support\Facades\Auth; // 仅统计当前用户的未处理通知,直接用count()在数据库层面统计更高效 $check_count = Auth::check() ? \App\Models\Support::where('status', 2)->where('user_id', Auth::id())->count() : 0; @endphp <li class="header__menu-item"> <span>Support</span> @if($check_count > 0) <span class="notification notranslate">{{ $check_count }}</span> @endif </li>
代码优化说明
- 使用
count()直接在数据库层面完成统计,避免先查询所有数据再计数的性能浪费。 - 增加
Auth::check()判断,处理未登录用户的情况,避免因无用户ID导致的报错。 - 通过
where('user_id', Auth::id())关联当前用户ID,实现每个成员看到专属的通知计数。
额外注意事项
- 确认
Support模型对应的数据表中,user_id字段正确存储了每条通知所属用户的ID。 - 若项目中未全局引入Auth门面,需在模板或控制器中手动引入
use Illuminate\Support\Facades\Auth;。
内容的提问来源于stack exchange,提问作者HaGoN
相关产品推荐
相关产品推荐

