如何像数据库版本一样广播通知?

时间:2019-06-18 13:19:00

标签: 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"

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

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

1 个答案:

答案 0 :(得分:0)

环顾四周后,我发现没有简单的方法(无需更改某些核心)即可对此进行更改。这是我的(解决方法)解决方案。

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

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

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

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

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