$id = input(“param.id”);
$film = Db::table(“film”)->where(‘id’,$id)->find();
if($film[‘tickets’]>0){
$film[‘tickets’] = $film[‘tickets’]-1;
$r = Db::table(“film”)->where(‘id’,$id)->update([‘tickets’=>$film[‘tickets’]+1]);
if($r){
return $this->success(“恭喜你,抢购成功!”);
}
}
return $this->error(“抢购失败!”);
2、直接加锁,即悲观锁
$id = input(“param.id”);
$film = Db::table(“film”)->where(‘id’,$id)->lock(true)->find();
if($film[‘tickets’]>0){
$film[‘tickets’] = $film[‘tickets’]-1;
$r = Db::table(“film”)->where(‘id’,$id)->update([‘tickets’=>$film[‘tickets’]+1]);
if($r){
return $this->success(“恭喜你,抢购成功!”);
}
}
return $this->error(“抢购失败!”);
$id = input(“param.id”);
$film = Db::table(“film”)->where(‘id’,$id)->find();
if($film[‘tickets’]>0){
$film[‘tickets’] = $film[‘tickets’]-1;
$r = Db::table(“film”)->where(‘id’,$id)->where(‘version’,$film[‘version’])->update([‘tickets’=>$film[‘tickets’]+1,’version’=>$film[‘version’]+1]);
if($r){
return $this->success(“恭喜你,抢购成功!”);
}else{
//抢票失败,可重试。
}
}
return $this->error(“抢购失败!”);