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-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!
PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення
Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше