【问题标题】:Laravel: How to fire event when a particular column in users table changes?Laravel:当用户表中的特定列发生变化时如何触发事件?
【发布时间】:2017-10-18 13:34:17
【问题描述】:

在我的用户表中,我有一列名称已验证,数据类型为布尔值,默认值为“false”,但是,当任何特定用户的该列值更改为“true”时,我想触发一个事件,所以我可以根据该事件发出通知吗? 有什么想法可以实现吗?

【问题讨论】:

    标签: php laravel events notifications eloquent


    【解决方案1】:

    您可以向模型事件添加挂钩并执行检查。下面的代码在您的模型中。您可能希望也可能不希望将用户对象与事件一起传递。如果您要发送通知,这可能会派上用场。

    public static function boot()
    {
        parent::boot();
    
        static::updated(function($user) {
            if ($user->verified == true) {
                event(new UserVerified($user));
            }
        });
    }
    

    【讨论】:

    • 谢谢。这似乎是实现这个想法的好方法,但是我不确定这是否是最好的方法。再次感谢您。
    • 这是检测模型数据更改的唯一方法。可以使用观察者来实现相同的功能,它的作用相同,但逻辑会转移到另一个类。另一种方法是在更新时检测并触发控制器中的事件。但是,当您在多个位置更新模型时,这会变得乏味。
    【解决方案2】:

    我的想法是在更新目标表时创建触发器。更新后,您可以将记录插入另一个表EVENT

    您的代码可以定期从 EVENT 表中轮询以处理这些更新。

    如果您使用的是 Oracle DB,Oracle queues 将非常有用。

    【讨论】:

      【解决方案3】:

      您可以使用 Attribute Events 包在模型属性更改时触发事件:https://github.com/jpkleemans/attribute-events

      class User extends Model
      {
          protected $dispatchesEvents = [
              'verified:true' => UserVerified::class,
          ];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-11
        • 1970-01-01
        • 2014-02-22
        • 1970-01-01
        相关资源
        最近更新 更多