Отображать уведомление, когда в базе данных появляется новая строка, Laravel

#php #laravel

#php #laravel

Вопрос:

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

ОБНОВЛЕНО

Первая проблема связана со сценарием ниже. Я могу отправить уведомление, только если я использую URL этого маршрута. Route::get('/car/create', 'CarController@carNews'); Не тогда, когда я обновляю свою таблицу БД… Как я могу изменить это, чтобы отправлять уведомления не путем запуска URL, а путем обновления таблицы DB … (также пытаясь не отправлять всю таблицу, а только новые добавленные строки.)

Контроллер

 public function __construct()
{
    $this->middleware('auth');
}

public function carNews()
{
    $cars = DB::table('cars')->get();

    $user = User::first();

    $user->notify(new CarNews($cars));

    dd($user->notifications);
}
  

Вторая проблема заключается в отображении уведомления в блейде. Я не могу попасть внутрь столбца данных в таблице уведомлений в БД.

 @foreach(auth()->user()->unreadNotifications as $notification)
     <a href="#" class="dropdown-item">
            {{$notification->data->cars[0]['price']}}
     </a>
@endforeach
  

это дает мне ошибку ниже.

Пытаюсь получить свойство не-объекта

Кстати, когда я пытаюсь получить доступ к данным, подобным этому. {{$notification->data}} У меня эта ошибка.

htmlspecialchars() ожидает, что параметр 1 будет строковым, заданный массив

введите описание изображения здесь

Столбец выглядит так: мой путь неверен?

PS: если вам нужно просмотреть какие-либо другие файлы, прокомментируйте ниже.

Комментарии:

1. Возможно, вы ищете широковещательную

2. на самом деле, я хочу отправить веб-уведомление пользователю о новых данных… Таблица базы данных обновляется автоматически, поэтому, когда она будет обновлена, отправьте ее пользователю. с помощью, но у меня проблема внутри контроллера. Я делаю это очень, очень неправильно… @NikleshRaut с моим кодом контроллера, пользователь отправляет уведомление другому пользователю…

3. Прослушиватель событий?

4. Вы хотите получать асинхронные уведомления для пользователя? Тогда я бы попробовал что-то вроде pusher.com который интегрируется с Laravel.

5. Я знаю, но pusher — это второй шаг. Сначала мне нужно правильно отобразить данные в поле зрения… @ege

Ответ №1:

Ответ на вопрос 1;

если я правильно понимаю, вы хотите отправить сообщение при вставке новой строки в таблицу. На самом деле, я не понял, что вы указываете, о какой таблице базы данных, но неважно, я думаю, вы можете отправить новое уведомление в действии, где вставляется новая строка в таблицу. Таким образом, вы можете отправить уведомление в тот момент, когда вставлена новая строка.

Ответ на вопрос 2; Нет! Пути не неправильные, это только данные в кодировке Json. Вы должны расшифровать его через json_decode после этого вы сможете получить доступ ко всем свойствам объекта.

 @foreach(auth()->user()->unreadNotifications as $notification)
  @php($data = json_decode($notification->data));
  <a href="#" class="dropdown-item">
    {{$data->cars->price}}
  </a>
@endforeach
  

Можете ли вы попробовать мои приведенные выше советы?

Комментарии:

1. спасибо вам за ответ. Я попробовал ваш код, и он выдает эту ошибку. json_decode() expects parameter 1 to be string, array given Кстати, я не понял первый ответ 🙂 не могли бы вы объяснить немного подробнее. Спасибо

2. Можете ли вы показать мне выходные данные , если $notification->data ?

3. когда я делаю это {{$notification->data}} , отображается эта ошибка. htmlspecialchars() expects parameter 1 to be string, array given

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

5. Нет! 🙂 Вы должны печатать через dd(). {{dd($notification->data)}}