【发布时间】:2016-12-08 14:40:38
【问题描述】:
我的代码是
public function store(Request $request){
$invite = Invite::where('hash', $request->input('invite_token'))->first();
if($invite->status != 'sent')
return;
$invite->update([
'status' => 'creating_test_instance'
]);
event(new CreatingTestInstance($invite));
$createTestInstanceJob = new CreateTestInstance($invite);
dispatch($createTestInstanceJob);
}
如果我同时发送几个相同的请求,第一个请求将无法及时更新状态并且
if($invite->status != 'sent')
return;
没有被应用并且测试实例被多次创建。 我只能在一次邀请中拥有一个测试实例。 怎么可能得到保护? 用数据库事务实现它,但如果你有更好的解决方案,很高兴听到。 感谢您的回答。
【问题讨论】:
-
如果您同时发送请求,将会出现冲突问题。你不能控制发送多少请求并以这种方式控制冲突吗?
-
我测试了同时发送十个请求,其中三个通过了检查。
-
为什么同一个邀请会有十个请求?
-
因为有可能我必须阻止。它可以发送十个请求。所以我必须阻止这个。