#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)}}