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

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Scheduled Session Garbage Collection in Laravel 13.39 image

Scheduled Session Garbage Collection in Laravel 13.39

Read article
Deferred Schema Loading in Filament v5.8 image

Deferred Schema Loading in Filament v5.8

Read article
Sloppy: Static Analysis for AI-Written PHP image

Sloppy: Static Analysis for AI-Written PHP

Read article
Mastering Laravel Testing: A Video Course on Laravel Tests image

Mastering Laravel Testing: A Video Course on Laravel Tests

Read article
NativePHP Mobile Security Advisories: Update to 4.6.1 image

NativePHP Mobile Security Advisories: Update to 4.6.1

Read article
Volker Dusch on the PHP RCE Vulnerabilities and Disclosure image

Volker Dusch on the PHP RCE Vulnerabilities and Disclosure

Read article