2016-12-08 1 views
0
를 사용하여 동일한 요청을 필터링하는 방법

내 코드는 내가 동시에 여러 동일한 요청을 보내드립니다 경우 첫 번째 요청이 상태를 업데이트 시간에 얻을 수없는Laravel

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;

하지 테스트 인스턴스가 여러 번 생성됩니다. 한 번의 초대에서 하나의 Test 인스턴스 만 가질 수 있습니다. 어떻게 보호받을 수 있습니까? 데이터베이스 트랜잭션과 함께 구현되었지만 더 좋은 해결책이 있다면 매우 기쁩니다. 답변 해 주셔서 감사합니다.

+0

가 있는지 확인

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

. 전송되는 요청 수를 제어 할 수 없으며 그런 방식으로 충돌을 제어 할 수 있습니까? – scottevans93

+0

나는 10 개의 요청을 동시에 전송했는데 그 중 3 개가 검사를 통과했다. –

+0

동일한 초대에 대해 10 건의 요청이있는 이유는 무엇입니까? – scottevans93

답변

0

시도해보십시오

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

교체 : 당신이 동시에 충돌 문제가있을 것입니다 요청을 보낼 경우 어떤 차이를

+0

이것은 거의 동일한 행동이기 때문에 도움이되지 않습니다. 다른 상황에서는 도움이 될지 모르지만 여기에는 도움이되지 않습니다. –