【问题标题】:How to filter same requests using Laravel如何使用 Laravel 过滤相同的请求
【发布时间】: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;

没有被应用并且测试实例被多次创建。 我只能在一次邀请中拥有一个测试实例。 怎么可能得到保护? 用数据库事务实现它,但如果你有更好的解决方案,很高兴听到。 感谢您的回答。

【问题讨论】:

  • 如果您同时发送请求,将会出现冲突问题。你不能控制发送多少请求并以这种方式控制冲突吗?
  • 我测试了同时发送十个请求,其中三个通过了检查。
  • 为什么同一个邀请会有十个请求?
  • 因为有可能我必须阻止。它可以发送十个请求。所以我必须阻止这个。

标签: laravel real-time


【解决方案1】:

尝试替换

$invite->update([
    'status' => 'creating_test_instance'
]);

与:

$invite->status = 'creating_test_instance';
$invite->save();

看看有没有区别

【讨论】:

  • 这无济于事,因为这几乎是相同的行为。也许在其他情况下会有所帮助,但不是在这里。
猜你喜欢
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
相关资源
最近更新 更多