如何解决Laravel - 使用不同渠道为每个用户存储通知设置
我正在开发一个相当简单的应用程序,我希望我的用户能够订阅通知。所以系统应该:
- 当他们订阅的某个事件发生时发送通知。
- 向他们选择的渠道(电子邮件或 slack)发送通知
以下是每个用户可以订阅的不同通知的示例。
我想知道如何使用 Laravel 做到这一点。我的第一个想法是:
- 在
notifications
表上创建一个users
JSON 列,并将其存储(可能使用 Managing Mass User Settings 课程中的经验教训。)
{
"todo": {
"assigned": [
{
"email": true,"slack": true
}
],"mentioned": [
{
"email": true,"slack": true
}
]
},"project": {
"created": [
{
"email": true,"slack": true
}
]
}
}
但是,我不确定这是否是好的做法。此外,我也不确定如何实际动态发送通知。
为了发送出去,我想使用 Laravel 通知系统:
Notification::send($user,new TodoCreated($todo));
我不确定这是否是最好的方法,或者使用事件/侦听器设置是否更有意义?一个
另外,我可以利用 via()
类上的 Notification
方法根据用户设置动态指定频道吗?
不胜感激任何输入。
解决方法
我认为多对多关系更适合这种情况。
Tables:
User
- id
Notifications
- id
NotificationUser <-- pivot table
- notifcation_id
- user_id
- channel_id
Channel
- id
- name
要考虑数据透视表中的这些附加字段,请在用户模型关系中定义它们:
class User extends Model
{
/**
* The roles that belong to the user.
*/
public function notifications()
{
return $this->belongsToMany(Notification::class)->withPivot(['channel_id']);
}
}
见:https://laravel.com/docs/8.x/eloquent-relationships#retrieving-intermediate-table-columns
这样,你就可以利用 Laravel (eloquent) 自带的关系方法。
即:
aUser->notifications(); # Getting a list of a user's notifications
aUser->attach(1,['channel' => 1]); # attaching a notification to the user
您还可以利用查询范围为用户等检索一个通知渠道
见:https://laravel.com/docs/8.x/eloquent#query-scopes
然后按照您的计划使用模型/侦听器模式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。