2
EloquentでlockForUpdateを使用していると思われます。Laravel 5.1 DB BuilderとEloquentのlockForUpdateの違いは何ですか?
DB::beginTransaction();
User::find(1)->lockForUpdate();
... (doing some logic)
DB::commit();
しかし
DB::table('users')->where('id', '=', $userId)->lockForUpdate()
を使用して、常に動作します。これら2つのlockForUpdate()の違いは何ですか?
- Laravelバージョン:5.1
- PHPバージョン:5.7
- データベースドライバ&バージョン:MySQLの14.14
興味深い質問のようです。しかし、正確には*動作していますか?*動作しませんか?予期しない動作やエラーメッセージがあれば説明してください。 – alariva
@alariva、私の場合、ユーザーごとにユーザープロファイルテーブルに一意のエントリを作成しようとしました。ユーザーが誤って「保存」ボタンを2回クリックすると、ユーザーが多くのクリックを引き起こすのを防ぎませんでしたが、User :: find(1) - > lockForUpdate();という2つの行がユーザープロファイルテーブルに作成されます。だから私はそれが正しくロックされていないと思う。何か意味がありますか? – user1688099
今見ましたが、行をロックするだけではありません。一方、usersテーブルだけを扱っても、他のテーブルの同じ問題からあなたを救うことはできません。私は自分のプロジェクトに全く同じ問題(未解決)があります。(https://github.com/timegridio/timegrid/issues/20)良いニュースは、あなたが少なくとも 'users'テーブル。 – alariva