在Laravel中创建记录后发送通知

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Laravel中创建记录后发送通知相关的知识,希望对你有一定的参考价值。

是否可以在创建记录后发送通知?

我有一个游戏模型和一个用户模型,两者通过标记为captain_id的字段和organizer_id(两者都是对用户ID的引用)连接。现在我想要的是能够向两个用户发送关于新创建的游戏模型的通知。

我一直在寻找,我会继续这样做,但我没有找到类似于我的困境的帖子/教程/视频,所以我希望有人在这里遇到过类似的东西。

答案

如果您使用Laravel 5.5,我会强烈建议使用Laravel Events documentation。查看Model类(Illuminate / Database / Eloquent / Model),当创建一个对象时,它会触发一个事件(特别是fireModelEvent)。您可以做的是在该特定模型事件上注册Notification处理程序,并让该处理程序发送您想要的通知(即SMS,E-Mail,Slack等)

当你想要处理特定事件时我会做以下事情(我在我的例子中使用了User模型):

  1. 运行php artisan make:event UserCreated
  2. uses Notifiable添加到用户模型。
  3. 在User模型上创建变量。 protected $ dispatchesEvents = ['created'=> UserCreated :: class];
  4. 在新创建的事件中实现broadcastOn()函数,以执行您希望它执行的操作。
另一答案

以Jon的回答为例。您可以在模型上添加将触发模型事件(如已保存/创建)的引导方法。

protected static function boot(){
static::saved(function($thisModel){
        if (($thisModel->wasRecentlyCreated == true) && ($thisModel->attributes['status'] == 1)){
            $thisModel->send_created_mail($thisModel->id);
        }
        else{
            if ($thisModel->isDirty('status')) {
                $thisModel->send_status_mail($thisModel->attributes['status']);
            }
        }
    });
}

$ thisModel将是正在保存的模型的实例,因此您可以访问它的属性。如果你的模型扩展了一个基本模型或类似的东西,一定要在static :: saved()之前添加parent :: boot()

以上是关于在Laravel中创建记录后发送通知的主要内容,如果未能解决你的问题,请参考以下文章

laravel 8 : 注册后发送邮件验证 laravel

使用 MySQL 从 Firebase 推送通知

在Laravel中创建,更新或删除记录时识别sql错误的最佳方法

仅获取今天在 laravel 中创建的记录

如何在UWP App中创建信息丰富的Toast通知

Laravel 雄辩:更新父记录并使用一种形式在另一个表中创建新记录