首页 > 解决方案 > Laravel 观察者添加延迟

问题描述

如何在 laravel 观察者执行功能之前添加延迟?

我有这段代码,但它不起作用:

public function created(School $school)
{
    $addTime = Carbon::parse($school->created_at)
      ->addSeconds(6);

    if(Carbon::now() = $addTime) {
        $manager = School::where('id', $school->id)->with('manager')->first();
        $user = User::where('id', $school->manager->id)->first();
        Mail::to($user->email)->locale('id')->queue(new SchoolGenerated($school, $user));
    }
}

逻辑

我的控制器中有这样的功能

public function store(Request $request) {
  $school = new School;
  //.....
  if($school->save()){
    //save manager.....
  }
}

如您所见,我在保存学校数据后将经理分配给学校,因此如果我立即运行我的观察,它将找不到我的用户(经理),所以我需要延迟我的观察员,直到经理数据也被存储。

我怎样才能给我的观察者增加延迟?

标签: phplaravelphp-carbon

解决方案


你可以sleep(int $seconds )在php中使用函数,试试这个:

public function created(School $school) 
{
     // add delay
     $seconds = 10;

     sleep($seconds);

     $manager = School::where('id', $school->id)->with('manager')->first();
     $user = User::where('id', $school->manager->id)->first();
     Mail::to($user->email)->locale('id')->queue(new SchoolGenerated($school, $user));
}

}


推荐阅读