Php 拉维观测器加延迟
如何在laravel observer执行功能之前向其添加延迟 我有此代码,但不起作用:Php 拉维观测器加延迟,php,laravel,php-carbon,Php,Laravel,Php Carbon,如何在laravel observer执行功能之前向其添加延迟 我有此代码,但不起作用: public function created(School $school) { $addTime = Carbon::parse($school->created_at) ->addSeconds(6); if(Carbon::now() = $addTime) { $manager = School::where('id', $school-&
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.....
}
}
如您所见,我在保存学校数据后将管理员分配给学校,因此,如果我立即运行我的观察,它将找不到我的用户(管理员),因此我需要在我的观察者中设置延迟,直到管理员数据也被存储
如何为我的观察者添加延迟?您可以在php中使用睡眠(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˚就得到了我想要的结果。仍然无法获得经理数据,我还更改了控制器以确保经理数据与学校数据一起返回,但它没有对问题进行任何更改