#php #ajax #laravel #notifications #laravel-7
#php #ajax #laravel #уведомления #laravel-7
Вопрос:
Я реализую выпадающее меню с уведомлениями базы данных из 7 уведомлений Laravel. Я хочу, чтобы пользователь мог отклонить уведомление без необходимости перезагрузки страницы. Мой метод контроллера:
public function markAsRead($id) {
auth()->user()->unreadNotifications->where('id', $id)->markAsRead();
$notificationArray = array();
$user = Auth::user();
foreach ($user->unreadNotifications as $notification) {
$notificationArray[] = $notification;
}
return view("layouts/notifications_list", ["notifications" => compact("notificationArray")]);
}
Мой AJAX :
$.ajax({
method: "GET",
url: ' {{ route('notifications.markNotificationAsRead', ['id']) }}'.replace('id', notificationId),
cache: false,
success: function(response) {
$('#notifications-dropdown').empty();
$('#notifications-dropdown').html(response);
},
});
Я получаю уже отображенные значения. Похоже, что строка auth()->user()->unreadNotifications->where('id', $id)->markAsRead();
игнорируется.
Однако, когда я обновляю страницу, список обновляется.
Комментарии:
1. Как выглядит ваш маршрут?
' {{ route('...
может быть слишком много места. Как всегда, используйте вкладку DevTools / console / Network вашего браузера, чтобы убедиться, что вы не получаете ошибок / отправляете сообщение на правильный URL2. Функция вызывается без проблем. Я использовал dd для двойной проверки. Проблема в том, что возвращаемый список является старым, как будто никаких изменений не было сделано. После перенаправления отображаются правильные результаты
3. Может быть проблема с обновлением dom. Проверьте ответ на вызов ajax на вкладке network в browser devtools или с помощью console.log(ответ) в функции success и посмотрите, содержит ли ответ запись уведомления, для которой был сделан запрос ajax
4. @Donkarnash Действительно, это проблема, с которой я сталкиваюсь. Хотя, очевидно, markAsRead() работает, он не возвращает ожидаемый результат.
5. Что произойдет, если вы попробуете
$notificationsArray = $user->fresh()->unreadNotifications->all()
вместо foreach . Также проверьте, существует ли запись с $ id, полученная в качестве параметра маршрута, в $notificationsArray с помощью dd()