0

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 次测试,但结果相同。

谁能帮我?

4

1 回答 1

0

我建议您编写有关它的测试并检查事情是否真的有效。

您可以在测试 Event::fake() 中使用,然后使用函数 shouldreceive() 检查。

我认为这是做事的最佳方式。

于 2020-09-05T20:45:50.583 回答