关于Notifiable Trait的使用疑惑
1. 运行环境
Windows11 + Homestead (PHP7.4/Mysql5.7) + Laravel8.5
2. 问题描述?
按照官网文档,使用Notifiable Trait来做系统的“通知中心”。
文档:消息通知《Laravel 9 中文文档》
发送频道指定的是 database;
发送通知有两种方法:
$user->notify(new InvoicePaid($invoice));
Notification::send($users, new InvoicePaid($invoice));
因为我业务是一次批量给多个用户发送同一通知,所以如果用第一种方法的话,就得遍历用户一个一个的发,所以我使用的第二种方法,传入要发送的所有用户实例集合;
问题来了:
页面顶部有个“小铃铛”的通知中心入口,小铃铛边上显示用户未读的消息数,因此我再User
模型中新增了notification_count
作为冗余字段来存储未读消息数量;
如果用第一种方法,即 $user->notify(...)
发送通知,因为User
模型中使用了Notifiable Trait
即:use Notifiable;
,所以可以通过重写notify
方法来实现notification_count
字段的值+1;
但是我用的第二种方法,Notification::send(...)
,怎么实现发送通知后,给用户的notification_count
字段 +1 呢?
3. 您期望得到的结果?
批量给用户发送通知时更新用户的未读消息数量;
通知发送成功后会触发一个事件「NotificationSent」
可以监听这个事件来修改未读通知数
不过这样是逐条处理的,如果你确保每条都发送成功了,自己批量修改下也没问题吧