私はLaravel 5.2バックエンドと角度1フロントエンドアプリケーションを持っています。 REST APIを使用して通信します。すべてのページの読み込み時にデータベースデータを更新するコードがあります(このアプリはブラウザゲームなので、この場合プレーヤーのリソースとユニットは更新/作成されています)が、いくつかの問題が発生しています。ラーベル可能競合状態?
フロントエンドが複数のAPIエンドポイントを同時に要求する状況があります。最後の要求以降に新しいユニットが作成された場合は、Player
モデル(多対多関係)に対してEntity
はattached()
である必要があります。現実には、3つのすべてのリクエストが新しいEntity
を添付し、pivot
テーブルのSQL error: duplicate key
(正確な言葉ではない)で終わるようになります。
問題はEloquentと分離されません。たとえば、同時に3つのAPI要求が発生すると、3つのレポートメッセージが生成されます。
この問題を解決するにはどうすればよいでしょうか?今のところ、私はDB::transaction
でDBステートメントをラップしようとしましたが、これは問題を解決していないようです(または私は間違っていました)。
ご協力いただきありがとうございます。
あなたが使用していただきまして、データベースエンジンされているデータベースのどのような? MySQLのMyISAMなどの従来のデータベースエンジンはトランザクションではないことに注意してください。つまり、クエリが実行されるのを待つ間にテーブル全体がロックされます。複数のリクエストがアプリケーションに共通のものである場合は、おそらくInnoDBのようなトランザクション型dbエンジンの使用を検討する必要があります。 – LePhleg
1.「すべての3つのリクエスト」とは何ですか? 2.どのように送信していますか?ブラウザのページをすばやく更新しますか? 3つの別々のフロントエンドインスタンスからそれらを送信しますか? – bjauy
@bjauy 3つのリクエストは、ユーザーがブラウザでページをリフレッシュすると発生します。アプリのさまざまな部分がデータをかなり読み込んでいます。 –