【问题标题】:Send a notification whenever any update happens in LARAVEL每当 LARAVEL 中发生任何更新时发送通知
【发布时间】:2021-10-27 12:35:51
【问题描述】:

其实我遇到了一个问题。每当任何模式、任何用户和任何表格中发生任何更新时,我都需要向管理员发送通知。

澄清更多:

我有一个客户、一家公司和一个员工。 在每个部分下,我有很多表(例如:在客户下我有客户的个人资料表,在公司下我有很多表对应于公司的律师,公司的文件等......,类似于员工)

因此,相应地,我有很多控制器,因此有很多 update 方法。

所以为了在任何用户的任何情况下发生任何更新时向管理员发送通知。我必须在 ALL update METHODS 下包含通知语句 $admin->notify(new UpdateIsMade()); 太烦人了! 这是一种冗余。

我真正想要的方法是找到一个解决方案,让我在任何表下的任何用户发生任何更新时自动向管理员发送通知。

我尝试创建一个middleware 函数,并尝试在客户端用户下发生任何更新时发送通知(采样类型):

  public function handle(Request $request, Closure $next)
    {

        $clients = \App\Client::all();

        foreach ($clients as $client) {

          if($client->user->wasChanged()){

           $arr_of_changes = $client->user->getChanges();

           $admin=User::where('profile_type' , 'App\Admin')->first();
           $admin->notify(new UpdateIsMade($arr_of_changes,$original_arr));

           }

        }

        return $next($request);
    }

很遗憾,这个中间件不起作用。 我想问题是$client->user->wasChanged() 在更新发生时并没有给出真实值。看起来wasChanged 只能在update 方法中的save 进程之后起作用。

对我的问题有什么建议吗?感谢您抽出宝贵的时间,很抱歉您的文字太长了!

【问题讨论】:

  • 你应该考虑实现一个观察者来实现这一点。

标签: laravel


【解决方案1】:

如果您考虑使用数据库触发器以便完全独立地监控更改,这可能不会那么令人头疼。

您可以创建一个名为“change_log”的新表,其中包含“action”和“created_at”字段,然后设置触发器以在更新您要监控的任何表时插入新记录。

然后你只需设置一个 CRON 以调用 Laravel 控制器来查询 change_log 并查看其中是否有任何记录的间隔运行。如果有,代码将采取适当的措施来发送警报,然后清空表。在数据库触发器因所做的更改而触发之前,change_log 将保持为空。

【讨论】:

  • 好的。我会尝试这种方法谢谢!你对 laravel 事件和观察者有什么想法吗?他们对我的方法有帮助吗?
  • 我绝对认为这是另一种可行的方法! stackoverflow.com/questions/53298322/… 毕竟,事件是一种触发器。也就是说,我个人赞成上述分离,它利用了本机 DB 功能,并且由于它保持分离,因此实现起来非常简单,并且不需要参与 Laravel 代码中发生的实际更改事件,但我确实认为两者方法在以后能够更新和维护方面有其优点 - 例如,如果您可能需要为事件更改添加更智能的条件。
猜你喜欢
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多