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.....
  }
}

如您所见,保存学校数据后,我将管理员分配给学校,因此如果我立即运行观察程序,将找不到我的用户管理员),因此我需要延迟观察者,直到还存储了管理员数据。 / p>

如何向观察者添加延迟?

解决方法

您可以在php中使用sleep(int $seconds )函数,请尝试以下操作:

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));
}

}

,

已解决

由于创建经理后我无法获取学校数据,因此我已将观察改为使用创建经理的规则,而不是创建学校,这样我可以获取经理数据并基于经理数据获取学校数据。所以我基本上将逻辑旋转180˚就得到了我想要的结果。

相关问答

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