dan sharedLock()
membolehkan anda mengekalkan konsistensi data dalam senario konvensional yang tinggi. lockForUpdate()
Kaedah
membolehkan membaca, tetapi menghalang pengubahsuaian: sharedLock()
DB::table('users') ->where('votes', '>', 100) ->sharedLock() ->get();
menghalang pengubahsuaian dan perkongsian kunci pada masa yang sama: lockForUpdate()
DB::table('orders') ->where('status', 'pending') ->lockForUpdate() ->get();
class PaymentController extends Controller { public function processPayment($orderId, $amount) { return DB::transaction(function () use ($orderId, $amount) { $account = DB::table('accounts') ->where('order_id', $orderId) ->lockForUpdate() ->first(); if ($account->balance >= $amount) { DB::table('accounts') ->where('order_id', $orderId) ->update(['balance' => $account->balance - $amount]); return ['success' => true, 'message' => 'Payment processed successfully']; } return ['success' => false, 'message' => 'Insufficient funds']; }); } }
Atas ialah kandungan terperinci Menguruskan perlumbaan data dengan pengunci pesimis di Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!