Laravel Tutorials

Managing Data Races with Pessimistic Locking in Laravel

Published
Managing Data Races with Pessimistic Locking in Laravel image

Laravel provides robust pessimistic locking capabilities to prevent data races in concurrent database operations. Through sharedLock() and lockForUpdate() methods, you can maintain data consistency in high-concurrency scenarios.

The sharedLock() method prevents modifications while allowing reads:

DB::table('users')
->where('votes', '>', 100)
->sharedLock()
->get();

For more stringent control, lockForUpdate() blocks both modifications and shared locks:

DB::table('orders')
->where('status', 'pending')
->lockForUpdate()
->get();

This approach is particularly valuable in financial transactions or inventory management systems:

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'];
}
return ['success' => false, 'message' => 'Insufficient funds'];
});
}
}

These locking mechanisms are essential in applications where data accuracy is crucial and multiple processes might attempt to modify the same data simultaneously.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Validate and Convert HEIC Images in Laravel image

Validate and Convert HEIC Images in Laravel

Read article
Saga Lara Flow: Durable Workflows and Compensating Transactions on Laravel Queues image

Saga Lara Flow: Durable Workflows and Compensating Transactions on Laravel Queues

Read article
Reject Unexpected Array Keys with Laravel Validation image

Reject Unexpected Array Keys with Laravel Validation

Read article
Major performance improvements & security patches for Filament v4.12 and v5.7! image

Major performance improvements & security patches for Filament v4.12 and v5.7!

Read article
Laravel Boost Project Rules: Teach Agents Your Conventions image

Laravel Boost Project Rules: Teach Agents Your Conventions

Read article
Extract an Image's Dominant Color in Laravel image

Extract an Image's Dominant Color in Laravel

Read article