2016-09-05 5 views
2

Я знаю, что есть много способов, чтобы пометить как прочитанные все уведомления о качестве пользователя в L5.3, как это:метка чтения конкретного получателя уведомления в Laravel 5.3 Уведомления

$user = App\User::find(1); 

foreach ($user->unreadNotifications as $notification) { 
    $notification->markAsRead(); 
} 

Или:

$user->unreadNotifications->markAsRead(); 

Но предположим, что хочу отметить как прочитанное определенное уведомление с заданным ID.

На самом деле, я сделал список непрочитанных уведомлений пользователя, как это:

<ul class="menu"> 
     @foreach($AuthUser->unreadNotifications as $notif) 
      <li> 
       <a href="{{$notif->data['action']}}" data-notif-id="{{$notif->id}}"> 
        {{$notif->data['message']}} 
       </a> 
      </li> 
     @endforeach 
</ul> 

Как вы видите, каждый a тег имеет атрибут data-notif-id содержать Notif ID.

Теперь я хочу отправить этот идентификатор сценарию через Ajax (событие click) и пометить как прочитанное только это уведомление. для этого я написал:

$('a[data-notif-id]').click(function() { 

     var notif_id = $(this).data('notifId'); 
     var targetHref = $(this).data('href'); 

     $.post('/NotifMarkAsRead', {'notif_id': notif_id}, function (data) { 
      data.success ? (window.location.href = targetHref) : false; 
     }, 'json'); 

     return false; 
}); 

NotifMarkAsRead относится к сильфонные Контроллер:

class NotificationController extends Controller 
    { 
     public function MarkAsRead (Request $request) 
     { 
       //What Do I do Here........ 
     } 
    } 

Как я могу это сделать, пока нет каких-либо Notification модель?

+0

Если нет 'модели Notification' (так, не имеет никакого отношения множества), где делает' unreadNotifications' метод пришел? Или: что это? Пользовательский метод? – lesssugar

+0

Значок 'Illuminate \ Notifications \ Notifiable' предоставляет метод markAsRead', и я использовал его в User Model. –

+0

'unreadNotifications()' возвращает модель, поэтому вы можете использовать цепочку для фильтрации, например: '$ user-> unreadNotifications() -> где ('notifications.id', $ id) -> markAsRead(); '. Или, если метод 'markAsRead()' недоступен, я также попытаюсь использовать '-> update (['read_at' => Carbon :: now()])' вместо этого. – lesssugar

ответ

1

Согласно this Answer на Github, решение:

Illuminate\Notifications\DatabaseNotification где модель для уведомлений существует, то вы можете использовать его, чтобы захватить уведомление по ID и удалить его. Кроме того, если вы не хотите использовать модель, вы можете использовать обычный DB-запрос .

0

Это работает без сбоев:

$id = auth()->user()->unreadNotifications[0]->id; 
auth()->user()->unreadNotifications->where('id', $id)->markAsRead(); 
Смежные вопросы