Laravel. Как получить идентификатор уведомления базы данных?

Я использую уведомления базы данных, в коде уведомления у меня есть метод toDatabase:

public function toDatabase($notifiable)
    {
        $user = \App\SomeUsers::where('id', $notifiable->id)->first();
        return [
             'message' => $message,
        ];
    }

он возвращает массив данных, который отправляется на канал базы данных, указанный в via методе текущего уведомления:

public function via($notifiable)

    {
        return ['database'];
    }

Все как обычно, НО ... Проблема в том, что мне нужен идентификатор уведомления в базе данных здесь, в текущем файле уведомлений, чтобы я мог транслировать сообщение (из текущего файла уведомления) во внешний интерфейс, который содержит идентификатор уведомления в базе данных (чтобы я мог каким-то образом идентифицировать его, чтобы пометить его как прочитанное). Как получить его?

P.S. Более того, уведомление базы данных может быть поставлено в очередь, поэтому ... кажется, я не могу получить идентификатор ... P.P.S Еще слова, мне нужно широковещательное сообщение, содержащее ["id" => "id of just added corresponding database notification"].


person John Smith    schedule 16.05.2020    source источник
comment
Не могли бы вы поделиться кодом, в котором вы сейчас показываете уведомление?   -  person Christophe Hubert    schedule 17.05.2020
comment
Кристоф, спасибо за отзыв. Я нашел ответ, похоже, это именно то, что мне нужно. Я выложу.   -  person John Smith    schedule 17.05.2020


Ответы (1)


<?php

namespace App\Notifications;

use App\Channels\SocketChannel;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Redis;

class MyCustomNotification extends Notification implements ShouldQueue
{
    use Queueable;

    /**
     * Create a new notification instance.
     *
     * @return void
     */


    public function __construct($param)
    {
        $this->param = $param;
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        $channels = ['database'];
        return $channels;
    }

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {

    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toDatabase($notifiable)
    {
        info("This is the current notification ID, it's generated right here before inserting to database");
        info($this->id);
        return [

            'id'     =>  **$this->id**,
            'message' => 'Notification message',

        ];
    }


} 

$ this-> id решает проблему.

https://laracasts.com/discuss/channels/laravel/get-database-notification-id-in-push-notification

P.S. Хочу обратить внимание на один факт. Когда я разместил этот вопрос, я знал о $ this-> id, но не мог заставить его работать. Причина заключалась в следующем: когда я углублялся в свой целевой код с верхнего уровня, я вносил изменения в код, но они не применялись. Причина - очереди. Вам нужно перезапустить воркер laravel, чтобы применить настройки, поскольку логика кеширования Laravel или вам нужно временно удалить их: реализует ShouldQueue и используйте Queueable.

person John Smith    schedule 17.05.2020
comment
Решил и мою проблему, большое спасибо! - person Psycho; 20.04.2021
comment
для меня использование use Illuminate\Notifications\Notification; вместо use Notification; устранило проблему - person Psycho; 20.04.2021