在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模型):
- 运行
php artisan make:event UserCreated
- 将
uses Notifiable
添加到用户模型。 - 在User模型上创建变量。 protected $ dispatchesEvents = ['created'=> UserCreated :: class];
- 在新创建的事件中实现
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中创建记录后发送通知的主要内容,如果未能解决你的问题,请参考以下文章