如何广播与数据库版本相同的通知?



我正在使用以下内容将通知加载到刀片页面中:

$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:"AppUser"
read_at:null
type:"AppNotificationsTestNotification"
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:"AppNotificationsTestNotification"

因为它们不一样,所以我无法将此广播添加(取消移位)到初始加载的通知中。相反,我必须刷新初始数据并更新它。但是这样,每次收到通知广播时,我都会加载所有数据。相反,我想要的只是添加传入的广播。

关于如何在旅途中做到这一点的任何想法?

环顾四周后,我发现没有简单的方法(无需更改一些核心)来改变这一点。所以这是我的(解决方法)解决方案。

加载通知页面的初始数据来自数据库。实际上,它是从视图编辑器注入到刀片视图中,然后从那里注入到 vue 中,因此它是全局的。数据库通知格式和广播通知格式不匹配。当尝试将最新的传入通知取消移动(添加)到初始通知数据中时,这是一个大问题,因为它们是不同的。尽管有广播数据,但数据库数据具有具有附加created_at和数据字段的结构。而是使用(已经存在的)传入广播数据,而是使用从数据库重新获取整个通知数据。但它有很多缺点值得改变结构。主要的:

  • 尽管只接收传入的广播数据,但它使用大量流量
  • 它还使用进程查询数据库
  • 无法轻松对最后一个传入通知进行动画处理
  • 额外消耗时间

因此,不是从数据库中重新获取所有通知,而是将现有的传入广播数据调整为数据库格式。实际上不是所有数据,而只是可用和需要的数据,例如:

created_at: 'Yeni',
data: {
message: notification.message,
payload: notification.payload,
status: notification.status,
title: notification.title,
},
id: notification.id,

然后,可以将此数据取消移动到现有的初始数据库通知。

最新更新