laravel - 如何广播与数据库版本相同的通知?
问题描述
我正在将通知加载到刀片页面中:
$user = auth()->user();
$notifications = $user->notifications()->get();
return view( 'notifications' );
所以页面会加载所有现有的通知。然后我刷新每个传入通知的数据。但相反,我想将每个广播通知添加到此页面。问题是广播与我(最初)加载的不同。
最初加载的数据就像
created_at:"2019-06-18 12:41:52"
data:Object
id:"4dcd6e3c-2351-4e7f-a4fd-09eab7e56127"
notifiable_id:1
notifiable_type:"App\User"
read_at:null
type:"App\Notifications\TestNotification"
updated_at:"2019-06-18 12:41:52"
而广播就像
id:"31488065-f93e-41be-b79d-bd5590e52b41"
message:"This is a test message"
payload:"payload"
socket:null
status:"test"
title:"This is a test"
type:"App\Notifications\TestNotification"
因为它们不一样,所以我无法将此广播添加(取消转换)到最初加载的通知中。相反,我必须刷新初始数据并更新它。但是这样每次收到通知广播时,我都会加载所有数据。我想要的只是添加传入的广播。
关于我如何在旅途中做到这一点的任何想法?
解决方案
环顾四周后,我发现没有简单的方法(不改变一些核心)来改变它。所以这是我的(解决方法)解决方案。
加载通知页面的初始数据来自数据库。实际上它是从视图 Composer 注入到刀片视图中,然后从那里注入到 vue 中,因此它是全局的。数据库通知格式和广播通知格式不匹配。当尝试将最新传入的通知取消移位(添加)到初始通知数据中时,这是一个大问题,因为它们是不同的。尽管有广播数据,但数据库数据具有一个带有额外 created_at 和数据字段的结构。而是使用(已经存在的)传入广播数据,使用从数据库中重新获取整个通知数据。但它有很多缺点值得改变结构。主要的:
- 尽管只接收传入的广播数据,但它使用了大量流量
- 它还使用查询数据库的过程
- 最后传入的通知无法轻松动画化
- 额外的时间消耗
因此,现有的传入广播数据已适应数据库格式,而不是从数据库中重新获取所有通知。实际上并非所有数据,而只有可用和需要的数据,例如:
created_at: 'Yeni',
data: {
message: notification.message,
payload: notification.payload,
status: notification.status,
title: notification.title,
},
id: notification.id,
然后可以将这些数据取消转移到现有的初始数据库通知。
推荐阅读
- c++ - 递归地将元素添加到链表的末尾
- websocket - Facebook/Youtube 通知系统使用什么技术?
- javascript - 在网页中显示来自 JSON 导入的特定单元格
- javascript - 如何使用插入符号位置垂直导航文本区域
- java - 如何修复“无法调用”java.awt.Point.getX()”,因为“this.p”为空”
- zsh - 我不能在 archlinux 中调用 riscv64-unknown-elf-gcc
- javascript - jQuery bootstrap modal 和 bootbox with modal-backdrop
- kubernetes - docker 官方镜像 hello-world 使用 kubectl 命令不断报告“Back-off restarting failed container”
- python - 如何使用 Raspberry Pi 4 (Python) 对 atMega328p MCU 进行编程
- c# - ASP.Net MVC 如何操作配置文件中的自定义条目