2016-12-08 1 views
0

Mein Code istWie gleiche Anfragen filtern mit 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); 
} 

Wenn ich mehrere gleiche Anforderungen gleichzeitig senden werde die erste Anforderung nicht rechtzeitig Status zu aktualisieren erhalten und

if($invite->status != 'sent') return;

nicht angewendet werden und Testinstanz wird mehrmals erstellt. Ich kann nur eine Testinstanz auf einer Einladung haben. Wie könnte es geschützt werden? Implementiert es mit Datenbank-Transaktion, aber wenn Sie eine bessere Lösung haben sehr froh zu hören. Danke für die Antworten.

+0

macht Wenn Sie die Anfragen gleichzeitig senden es geht um Konfliktthemen sein. Können Sie nicht steuern, wie viele Anfragen gesendet werden, und den Konflikt auf diese Weise steuern? – scottevans93

+0

Ich habe getestet, zehn Anfragen gleichzeitig zu senden, drei von ihnen bestanden Prüfung. –

+0

Warum sollte es zehn Anfragen für dieselbe Einladung geben? – scottevans93

Antwort

0

Versuchen ersetzt

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

mit:

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

Prüfen Sie, ob es einen Unterschied

+0

Das wird nicht helfen, denn das ist fast das gleiche Verhalten. Vielleicht hilft es in anderen Situationen, aber nicht hier. –

Verwandte Themen