select for updateしたい!
公式ドキュメントにはサラッとtransactionの事が書いていますが、select for updateはどうするのかがわかりません。
laravelのtransactionはなんて素敵な仕組み
- オフィシャルのドキュメントを読んで頂ければわかるんですが
- https://laravel.com/docs/5.3/database#database-transactions
You may use the transaction method on the DB facade to run a set of operations within a database transaction. If an exception is thrown within the transaction Closure, the transaction will automatically be rolled back. If the Closure executes successfully, the transaction will automatically be committed. You don't need to worry about manually rolling back or committing while using the transaction method:
- transactionメソッドのclosure内で書いておけば、commitやrollbackも自動でやってくれる素敵仕様
- デッドロックした場合の再試行もtransactionメソッドの引数で指定できます。
結論
- いやーオフィシャルドキュメントを疑ってしまうぐらい簡単に書けますね・・・。
\DB::transaction(function () use ($id) {
$model = \Hoge\Model::lockForUpdate()->find($id);
$model->name = 'ほげ太郎';
$model->save();
});