You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何实现仅user_status变为Active时触发邮件发送功能

解决方案

你只需要调整User模型boot方法中updated事件的判断逻辑即可,Laravel原生提供了字段变更判断的相关方法可以直接使用:

修改后的User模型boot方法代码

public static function boot()
{
    parent::boot();
    static::updated(function ($user) {
        // 仅当user_status字段被修改,且修改后的值为Active时触发事件
        if ($user->wasChanged('user_status') && $user->user_status == 'Active') {
            event(new UserStatusChangeEvent($user));
        }
    });
}

如果需要更严谨,避免本来就是Active状态、用户重复设置为Active的误触发场景,可以再加一层原始值判断:

public static function boot()
{
    parent::boot();
    static::updated(function ($user) {
        // 仅当user_status从非Active变更为Active时触发事件
        if ($user->wasChanged('user_status') 
            && $user->user_status == 'Active'
            && $user->getOriginal('user_status') != 'Active'
        ) {
            event(new UserStatusChangeEvent($user));
        }
    });
}

逻辑说明

  • wasChanged('user_status') 用于判断本次更新操作中,user_status字段是否真的被修改并写入了数据库,其他字段(比如is_active)变更时这个判断会返回false,不会进入后续逻辑
  • getOriginal('user_status') 可以获取字段修改前的原始值,加这个判断可以过滤掉本来就是Active状态、重复设置为Active的无效触发场景
    调整后不需要修改事件、监听器、注册映射的其他代码,即可满足需求。

内容的提问来源于stack exchange,提问作者Hamza Mughal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 07:12:01