首页 > 解决方案 > 如何广播与数据库版本相同的通知?

问题描述

我正在将通知加载到刀片页面中:

$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"

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

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

标签: laravel

解决方案


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

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

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

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

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

然后可以将这些数据取消转移到现有的初始数据库通知。


推荐阅读