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

时间:2017-11-20 21:10:19

标签: php laravel laravel-5 notifications

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

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

我一直在各处搜索,我会继续这样做,但我没有找到类似于我的困境的帖子/教程/视频,所以我希望此处有人遇到过类似的事情。< / p>

2 个答案:

答案 0 :(得分: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. 在用户模型上创建变量。

    protected $ dispatchesEvents = [ &#39;创建&#39; =&GT; UserCreated ::类 ];

  4. 在新创建的事件中实施broadcastOn()功能,以执行您希望的操作。

答案 1 :(得分: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()