0

我试图计算我在 laravel 中有多少未读通知没有登录用户的名称值。

到目前为止,我已经设法做到以下几点,我得到了所有未读通知的数量:

auth()->user()->unreadNotifications->count()

但我只想计算名称值不等于登录用户名的那些

我想出了这样的东西,但它不起作用,我不知道如何不等于而不是等于:

  $numberofnotifications = auth()->user()->unreadNotifications::where('name', Auth::user()->name)->count();
4

2 回答 2

1

如果您使用的是 MySQL 5.7+ 或 MariaDB 10.2+,您可以利用 Json Search。

auth()->user()->unreadNotifications()->where('data->name', '<>', auth()->user()->name)->count();

对于所有未读通知,您应该像下面这样计算,而不是auth()->user()->unreadNotifications->count().

Auth::user()->unreadNotifications()->count()

当您可以通过单个查询简单地获取计数时,您的方法将加载所有通知,然后在 php 中执行计数。

于 2021-10-13T22:07:57.300 回答
-1

我不会测试它,但如果你看一下vendor/laravel/framework/src/Illuminate/Notifications/DatabaseNotification.php你会注意到一个名为newCollection. 因此,按理说这应该在您的要求的背景下起作用:

$numberofnotifications = auth()->user()->unreadNotifications::newCollection()->where('name', '<>', Auth::user()->name)->count();
于 2020-12-30T08:44:48.323 回答