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

如何实现通知特定用户?附AdsController.php代码示例

实现通知特定用户的功能

首先咱们得先明确「特定用户」的具体范围——是固定几个已知ID的用户?还是满足某个条件(比如角色、部门)的用户?或是前端传递过来的目标用户列表?下面针对几种常见场景,结合你的现有代码给出修改方案:

场景1:通知固定ID的特定用户

如果你已经明确知道要通知的用户ID(比如[2,5,7]),可以直接通过ID筛选用户:

public function save(Request $request) { 
    $this->validate($request,[ 
        'object'=>'required', 
        'description'=>'string', 
    ]); 
    $ads = new Ad; 
    $current_user=Auth::user(); 
    $ads->object = $request->input('object'); 
    $ads->description = $request->input('description'); 
    $ads->save(); 

    // 替换成你实际要通知的用户ID数组
    $targetUserIds = [2, 5, 7];
    // 可选:排除当前用户,避免给自己发通知
    $targetUserIds = array_filter($targetUserIds, function($id) use ($current_user) {
        return $id != $current_user->id;
    });

    $users = User::whereIn('id', $targetUserIds)->get(); 
    foreach ($users as $user) { 
        $user->notify(new NewAd($current_user, $ads)); 
    } 
    return redirect()->back()->with('success', '广告已发布,通知已发送');
}

场景2:从请求参数接收要通知的用户ID

如果前端会传递目标用户的ID列表(比如请求里带target_user_ids参数),可以这样处理:

public function save(Request $request) { 
    // 新增对目标用户ID的验证,确保ID都存在于用户表
    $this->validate($request,[ 
        'object'=>'required', 
        'description'=>'string', 
        'target_user_ids' => 'array|exists:users,id'
    ]); 
    $ads = new Ad; 
    $current_user=Auth::user(); 
    $ads->object = $request->input('object'); 
    $ads->description = $request->input('description'); 
    $ads->save(); 

    $targetUserIds = $request->input('target_user_ids', []);
    // 排除当前用户
    $targetUserIds = array_filter($targetUserIds, function($id) use ($current_user) {
        return $id != $current_user->id;
    });

    $users = User::whereIn('id', $targetUserIds)->get(); 
    foreach ($users as $user) { 
        $user->notify(new NewAd($current_user, $ads)); 
    } 
    return redirect()->back()->with('success', '广告已发布,通知已发送');
}

场景3:根据特定条件筛选用户

比如要通知所有「编辑」角色的用户,或者某个部门的用户:

public function save(Request $request) { 
    $this->validate($request,[ 
        'object'=>'required', 
        'description'=>'string', 
    ]); 
    $ads = new Ad; 
    $current_user=Auth::user(); 
    $ads->object = $request->input('object'); 
    $ads->description = $request->input('description'); 
    $ads->save(); 

    // 示例:筛选角色为editor的用户,同时排除当前用户
    $users = User::where('role', 'editor')
                 ->where('id', '!=', $current_user->id)
                 ->get(); 

    foreach ($users as $user) { 
        $user->notify(new NewAd($current_user, $ads)); 
    } 
    return redirect()->back()->with('success', '广告已发布,通知已发送');
}

小技巧

如果只需要通知单个特定用户,不用循环,直接查找用户后调用通知即可:

$targetUser = User::find(2);
// 确保用户存在且不是当前用户
if ($targetUser && $targetUser->id != $current_user->id) {
    $targetUser->notify(new NewAd($current_user, $ads));
}

内容的提问来源于stack exchange,提问作者souma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:21:34