我正在使用以下命令将通知加载到刀片服务器页面中:
$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"
因为它们不相同,所以我无法将此广播添加(取消移动)到最初加载的通知中。相反,我必须刷新初始数据并进行更新。但是通过这种方式,每次接收到通知广播时,我都会加载所有数据。我想要的只是添加传入的广播。
关于我如何在旅途中做到这一点的任何想法?
答案 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,
然后可以将这些数据取消转移到现有的初始数据库通知中。