Laravel пропонує надійні можливості песимістичного блокування для запобігання конфліктам при одночасних операціях з базою даних. За допомогою методів sharedLock() та lockForUpdate() ви можете зберігати цілісність даних у ситуаціях з високою конкурентністю.
Метод sharedLock() забороняє зміни, але дозволяє читання:
DB::table('users')
->where('votes', '>', 100)
->sharedLock()
->get();
Для більш жорсткого контролю метод 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' => 'Платіж оброблено'];
}
return ['success' => false, 'message' => 'Недостатньо коштів'];
});
}
}
Ці механізми блокування є надзвичайно важливими в додатках, де критично важлива точність даних, і кілька процесів можуть намагатися одночасно модифікувати одні й ті ж дані.
Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!
Laravel Livewire випустив нову версію 3.6, яка приносить з собою цікаві HTML-директиви для управління видимістю DOM-елементів і JavaScript-діями. Досліджуйте нові можливості Livewire, що допоможуть вам створити ще більш інтерактивні користувацькі інтерфейси!
Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!