Laravel обновление уведомлений в реальном времени при удалении уведомлений - PullRequest
0 голосов
/ 20 января 2020

Так что я создаю пользовательские уведомления в реальном времени с помощью Pusher & Laravel Echo .

Я могу сказать, что это работает. но у меня есть два вопроса.

First: когда уведомление было удалено из базы данных, оно все равно появилось бы в области уведомлений. пока я не обновлю sh страницу.

, поэтому я пытаюсь обновить список уведомлений в режиме реального времени, даже если уведомление было удалено, а затем удалить его.

скажем, у меня есть уведомление под названием "тест 1", и я удалил его из базы данных, и создал это уведомление снова. это будет дубликат «теста 1».

, поэтому я думаю о «Обновлении области уведомлений, чтобы также удалять удаленные уведомления в режиме реального времени».

Secondly: когда приходит новое уведомление, он добавляется внизу списка уведомлений, что если я хочу, чтобы он был вверху списка? это высокоприоритетная вещь.

Вот некоторые фрагменты моего кода:

NewPostController :

public function create() {
    $user->notify(new NewPostNotification(
        'foo',
        'bar',
    ));
}

public function destroy() {
    DB::table('notifications')->select('*')->where([
        ['type', '=', 'App\Notifications\NewPostNotification']
    ])->delete();
}

NewPostNotification :

public function via($notifiable) {
    return ['database', 'broadcast'];
}

public function toDatabase() {
    return [
        'foo' => 1,
        'bar' => 2
    ];
}

public function toBroadcast($notifiable) {
    return new BroadcastMessage ([
        'notification' => $notifiable->notifications()->latest()->first()
    ]);
}

Уведомление. vue

<template>
    <notification-item v-for="unread in unreadNotifications" :unread="unread" :key="unread.id"></notification-item>
</template>

<script>
    import NotificationItem from './NotificationItem.vue';
    export default {
        props: ['unreads', 'userid'],
        components: {NotificationItem},
        data(){
            return {
                unreadNotifications: this.unreads
            }
        },
        mounted() {
            Echo.private('App.User.' + this.userid)
                .notification((notification) => {
                    let newUnreadNotifications = {data: notification.notification.data };
                    this.unreadNotifications.push(newUnreadNotifications);
                });
        }
    }
</script>

Элемент уведомления. vue

<template>
        <div class="notification-item">
            <h2>{{ unread.data.foo }}</h2>
            <p>{{ unread.data.bar }}</p>
        </div>
</template>

header.blade. php:

{{--notification--}}
<notification :userid="{{auth()->id()}}" :unreads="{{auth()->user()->unreadNotifications}}"></notification>

Как мне этого добиться?

Спасибо.

...