Laravelで行ロックとテーブルロックする方法メモ。便利なlockForUpdateメソッドでサクッとロックできます。
行ロック
1 2 | // hogesテーブルで$hoge_idの主キーが存在する行をロック Hoge::lockForUpdate()->withTrashed()->find($hoge_id); |
テーブルロック
1 2 | // hogesテーブルをロック Hoge::lockForUpdate()->withTrashed()->get(); |
ロックはコミットするまで持続します。
lockForUpdateメソッド
lockForUpdateメソッドで占有ロックをかけることができます。
select for updateのようなレコード更新や削除する際に、別のロックがかかるのを防ぐことができます。
また、共有ロックをかける場合はsharedLockメソッドをクエリに指定します。
withTrashedメソッド
ソフトデリートされたモデルであっても、withTrashedメソッドを使うことで一時的に除外されます。ソフトでリートを使用していない場合は不要です。
つまり、既に削除されたレコードでもwithTrashedメソッドを使うことで、対象のレコードを取得することが可能です。