使用 Observer 每个事件要等待 4 秒钟?还是我的操作有误?(已解决)!
attendances表 主要五个字段
created_at 上班签到时间;
updated_at 下班签到时间
sip 上班签到IP
eip 下班签到IP
ctime 是统计时长;例如(8小时53分钟55秒);
逻辑:用户点击下班签到 会自动计算出 上班签到时间-下班签到时间 =ctime时间;
问题:每次点击下班签到需要等待大约4秒钟
控制器逻辑
//上班签到
public function store(Request $request)
{
$request->user()->attendances()->create([
'sip' => $request->getClientIp(), //上班签到IP
]);
return redirect()->back()->with('success', '上班签到');
}
//下班签到
public function update(Request $request, Attendance $attendance)
{
$attendance->update([
'eip' => $request->getClientIp(), //下班签到IP
]);
return redirect()->back()->with('success', '下班签到');
}
App/Providers/AppServiceProvider.php
public function boot()
{
//注册观察者
Attendance::observe(AttendanceObserver::class);
}
Observers/AttendanceObserver.php
public function updated(Attendance $attendance)
{
//维护时间
$one = strtotime($attendance->created_at);
$two = strtotime($attendance->updated_at);
$three = $two - $one;
$h = floor(($three%(3600*24))/3600);
$m = floor(($three%(3600*24))%3600/60);
$s = floor(($three%(3600*24))%60);
$four = $h . '小时' . $m . '分钟' . $s . '秒' ;
$attendance->ctime = $four;
$attendance->save();
}
遇到问题查看文档以及教程后发现,不能在Observer里面使用CRM;要用DB查询构造器,避免循环问题;
修改后
public function updated(Attendance $attendance)
{
//维护时间
$one = strtotime($attendance->created_at);
$two = strtotime($attendance->updated_at);
$three = $two - $one;
$h = floor(($three%(3600*24))/3600);
$m = floor(($three%(3600*24))%3600/60);
$s = floor(($three%(3600*24))%60);
$four = $h . '小时' . $m . '分钟' . $s . '秒' ;
$last = Attendance::orderBy('created_at','desc')->first()->id;
\DB::table('attendances')->where('id',$last)->update(['ctime' => $four]);
}
分享此问题的目的是,当其他人遇到此问题的时候可以快速锁定问题!
推荐文章: