将单个Laravel通知标记为已读

时间:2019-01-18 12:25:05

标签: php laravel

我的应用程序中有一个页面,该页面显示用户当前拥有的所有未读通知的列表,每个通知将具有已读图标。

数据库中的ID设置为"USD" => array("United States Dollar", "$"), ,因此一长串字母和数字也是如此。当我在页面上显示通知的ID时,它们都返回与数据库中的内容完全无关的数字,因此当我运行查询以读取通知时,由于ID为“ t匹配。

在Laravel中读取单个通知的最佳方法是什么?我正在使用下面的代码进行尝试,但是char是不正确的,因为我似乎获得了12310作为ID,甚至对于其中的一些甚至为0。

$request->get('id')

3 个答案:

答案 0 :(得分:0)

上面的函数将使用第一个方法返回一个数组: $ note = Auth :: user()-> unreadNotifications-> where('id',$ request-> get('id'))-> first()-> get(); $ note-> markAsRead();

答案 1 :(得分:0)

Laravel notifications表的id使用CHAR作为默认字段类型。因此,当您过滤某些ID时,必须使用first(),如下所示。由于unreadNotificationsIlluminate\Notifications\DatabaseNotificationCollection

$notificationId = request('notification_id');

$userUnreadNotification = auth()->user()
                            ->unreadNotifications
                            ->where('id', $notificationId)
                            ->first();

if($userUnreadNotification) {
    $userUnreadNotification->markAsRead();
}

答案 2 :(得分:0)

Laravel notifications表的ID使用CHAR作为默认字段类型。因此,当您过滤某个ID时,必须使用first(),如下所示。

我的xxx.blade.php是:

 

   <li class="nav-item dropdown">
        <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
            <span class="glyphicon glyphicon-globe"></span>Notifications<span class="badge">{{ count(Auth::user()->unreadNotifications) }}</span>

        </a>

        <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
            @foreach(Auth::user()->unreadNotifications as $notification)
            <a href="{{route('vendor.commentReplay',[ 'id' => $notification->id])}}" class="dropdown-item" >
                {{$notification->data['user']['email']}} commented on <strong> {{$notification->data['CommentDetails']['comment']}}</strong>
            </a>
            @endforeach
        </div>
    </li>

web.php中:

    Route::get('comment-replay/{id}','VendorsController@comment_replay')->name('commentReplay');

最后,在我的VendorsController@comment_replay函数中,如下所示:


    public function comment_replay($id)
    {
        $userUnreadNotification = auth()->user()
                                        ->unreadNotifications
                                        ->where('id', $id)
                                        ->first();
    
        if($userUnreadNotification) {
            $userUnreadNotification->markAsRead();
        }
    }