Laravel更新事件无法正常工作

问题描述

Laravel版本:7.14.1

这是我的电子邮件模型。

 class Email extends Model {

    public static function boot() {
        parent::boot();
        static::updated(function($obj) {
            \Log::info('1-'.$obj->status); 

            if($obj->status==='active') {
                \Log::info('2-'.$obj->status);

                $obj->sendCampaign();
            }
        });
    }

   public function sendCampaign()
    {
        $campaign = $this;

        dispatch(new SendEmailJob($campaign ));

        $campaign->status='sent';
        $campaign->save();

        \Log::info('3-' . $campaign->status);

    }
}

## old状态为sent。我刚刚将其更新为active

这是我的日志结果:

[2020-09-04 16:47:57] local.INFO: 1-active  
[2020-09-04 16:47:57] local.INFO: 2-active  
[2020-09-04 16:47:58] local.INFO: 1-sent  
[2020-09-04 16:47:58] local.INFO: 3-sent 

我认为根据我的逻辑和记录结果,状态列最后应该为sent

但是当我在db上看到它时,它是active。 我测试了5次,但结果却是相同的。

有人可以帮助我吗?

解决方法

我建议您对此进行测试,并检查是否确实有效。

您可以在测试Event :: fake()中使用它,然后使用功能shouldreceive()进行检查。

这是做事情的最好方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...