Laravel 数据库通知仅更新计数

Posted

技术标签:

【中文标题】Laravel 数据库通知仅更新计数【英文标题】:Laravel database notifications update count only 【发布时间】:2022-01-18 12:18:23 【问题描述】:

我在 Laravel 中构建了一个应用程序,用于向用户发送通知。

例如,当创建新帖子时,它会根据某些条件向多个用户发送通知,我面临的问题是在短时间内创建多个帖子时,例如 30 分钟我不希望用户通过大量通知获得通知, 我只想更新上次通知中的计数。

但我需要在更新最后一个通知时阻止创建新通知。

这是我写的。

public function toDatabase($notifiable): array
    $count = 1;
    if($notification = $notifiable->notifications()->where('data->search', $this->search->id)
        ->where('updated_at', '>=', now()->subMinutes(30))
        ->first()) 
        $count = isset($notification->data['count']) ? $notification->data['count'] + 1 : 1;
        $notification->update([
            'data' => [
                'content' => [
                    'en' => "$count new posts matched with your saved search $this->search->title has been posted, Press here to view more.",
                ],
                'count' => $count
            ]
        ]);
    
    return [
        'content' => [
            'en' => "$count new post matched with your saved search $this->search->title has been posted, Press here to view more.",
        ],
        'count' => $count,
        'search' => $this->search->id,
        'parameters' => $this->search->parameters
    ];

如何防止代码到达返回[]?

【问题讨论】:

【参考方案1】:

也许添加另一个条件,也许在您的数据库中添加一列 Last_send 并在执行时比较 Last_send 的当前时间,如果时间大于 30 分钟,则让它过去。

【讨论】:

我实际上是通过将代码移动到“via”方法来修复它,如果条件通过我返回空数组,否则返回['database']

以上是关于Laravel 数据库通知仅更新计数的主要内容,如果未能解决你的问题,请参考以下文章

更新推送通知徽章计数

Laravel 模型计数未更新值 [关闭]

Laravel 5.3更新记录。仅更新已更改的记录并保留未更改的记录

在 ios7 中更新推送通知的徽章计数

在 ios7 中更新推送通知的徽章计数

如何仅在数据存在时验证 laravel 输入?