Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-使用不同通道存储每个用户的通知设置_Php_Laravel_Laravel 8_Php 8 - Fatal编程技术网

Php Laravel-使用不同通道存储每个用户的通知设置

Php Laravel-使用不同通道存储每个用户的通知设置,php,laravel,laravel-8,php-8,Php,Laravel,Laravel 8,Php 8,我正在开发一个相当简单的应用程序,希望我的用户能够订阅通知。因此,系统应: 当订阅的特定事件发生时发送通知。 向他们选择的频道发送通知电子邮件或电子邮件 下面是每个用户可以订阅的不同通知的示例 我想知道如何使用Laravel做到这一点。我的第一个想法是: 在users表上创建一个notifications JSON列,并像可能使用本课中的知识一样存储它。 { 待办事项:{ 分配:[ { 电子邮件:是的, 是的 } ], 提到:[ { 电子邮件:是的, 是的 } ] }, 项目:{ 创建:[ {

我正在开发一个相当简单的应用程序,希望我的用户能够订阅通知。因此,系统应:

当订阅的特定事件发生时发送通知。 向他们选择的频道发送通知电子邮件或电子邮件 下面是每个用户可以订阅的不同通知的示例

我想知道如何使用Laravel做到这一点。我的第一个想法是:

在users表上创建一个notifications JSON列,并像可能使用本课中的知识一样存储它。 { 待办事项:{ 分配:[ { 电子邮件:是的, 是的 } ], 提到:[ { 电子邮件:是的, 是的 } ] }, 项目:{ 创建:[ { 电子邮件:是的, 是的 } ] } } 然而,我不确定这是否是一种好的做法。此外,我还不确定如何实际动态发送通知

发送时,我想使用Laravels通知系统:

通知::发送$user,新TodoCreated$todo; 我不确定这是不是最好的方法,或者使用事件/侦听器设置是否更有意义?A

另外,我可以利用Notification类上的via方法根据用户设置动态指定频道吗


任何意见都将不胜感激。

我认为多对多关系更适合这种情况

Tables:

User
 - id

Notifications
 - id

NotificationUser <-- pivot table
 - notifcation_id
 - user_id
 - channel_id

Channel
 - id
 - name 
见:

通过这种方式,您可以利用Laravel Elotent提供的关系方法

i、 e:

您还可以利用查询范围为用户等检索一个通知通道

见:


然后按照计划使用模型/侦听器模式。

我认为多对多关系更适合这种情况

Tables:

User
 - id

Notifications
 - id

NotificationUser <-- pivot table
 - notifcation_id
 - user_id
 - channel_id

Channel
 - id
 - name 
见:

通过这种方式,您可以利用Laravel Elotent提供的关系方法

i、 e:

您还可以利用查询范围为用户等检索一个通知通道

见:


然后按照您的计划使用model/listener模式。

但是我怎样才能控制不同的频道呢?也就是说,用户启用了通知类型1,并希望将其发送到Slack和Email?可以将其他字段添加到数据透视表中。例如,您可以在NotificationUser pivot表上有一个类型,它可以是NotificationTypes表的一对多,其中您可以有id:1,名称:“email”;id:2名称:'slack'等。请参阅我更新了我的答案以说明频道。使用Pivot'channel'添加时,我得到:未知列'notification\u user.channel'您是否将该列添加到通知用户迁移中?如果你正在进行一对多关系,那么它也应该是channel_id。对不起,我把频道放错了。但是我怎样才能控制不同的频道呢?也就是说,用户启用了通知类型1,并希望将其发送到Slack和Email?可以将其他字段添加到数据透视表中。例如,您可以在NotificationUser pivot表上有一个类型,它可以是NotificationTypes表的一对多,其中您可以有id:1,名称:“email”;id:2名称:'slack'等。请参阅我更新了我的答案以说明频道。使用Pivot'channel'添加时,我得到:未知列'notification\u user.channel'您是否将该列添加到通知用户迁移中?如果你正在进行一对多关系,那么它也应该是channel_id。对不起,我放错频道了。
aUser->notifications(); # Getting a list of a user's notifications
aUser->attach(1, ['channel' => 1]); # attaching a notification to the user