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

问题描述 投票:0回答:2

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

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

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

php laravel laravel-5 notifications
2个回答
2
投票

如果您使用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()函数,以执行您希望它执行的操作。

1
投票

以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()

© www.soinside.com 2019 - 2024. All rights reserved.