РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
383 of 1392 menu

Метод commit

Метод commit класса DB применяется для подтверждения транзакции в базе данных. Он фиксирует все изменения, выполненные в рамках текущей транзакции, и делает их постоянными. Метод вызывается после успешного выполнения всех операций внутри транзакции. Если транзакция не была начата, вызов метода приведёт к исключению.

Синтаксис

<?php DB::commit(); ?>

Пример

Давайте выполним простую транзакцию по переводу средств между пользователями:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; use AppModelsUser; class TransferController extends Controller { public function transfer($from, $to, $amount) { DB::beginTransaction(); try { $sender = User::find($from); $receiver = User::find($to); $sender->balance -= $amount; $receiver->balance += $amount; $sender->save(); $receiver->save(); DB::commit(); echo "Transfer completed successfully"; } catch (Exception $e) { DB::rollBack(); echo "Transfer failed: " . $e->getMessage(); } } } ?>

Результат выполнения кода при успешном переводе:

"Transfer completed successfully"

Пример

Давайте выполним транзакцию с добавлением заказа и обновлением количества товара на складе:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; use AppModelsOrder; use AppModelsProduct; class OrderController extends Controller { public function createOrder($productId, $quantity) { DB::beginTransaction(); try { $product = Product::find($productId); if ($product->stock < $quantity) { throw new Exception("Not enough stock"); } $order = new Order(); $order->product_id = $productId; $order->quantity = $quantity; $order->save(); $product->stock -= $quantity; $product->save(); DB::commit(); echo "Order created successfully"; } catch (Exception $e) { DB::rollBack(); echo "Order creation failed: " . $e->getMessage(); } } } ?>

Результат выполнения кода при успешном создании заказа:

"Order created successfully"

Пример

Давайте выполним транзакцию с множественными обновлениями в разных таблицах:

<?php namespace AppHttpControllers; use IlluminateSupportFacadesDB; use AppModelsUser; use AppModelsProfile; use AppModelsSettings; class UserController extends Controller { public function updateUserSettings($userId, $data) { DB::beginTransaction(); try { $user = User::find($userId); $user->name = $data['name']; $user->email = $data['email']; $user->save(); $profile = Profile::where('user_id', $userId)->first(); $profile->bio = $data['bio']; $profile->avatar = $data['avatar']; $profile->save(); $settings = Settings::where('user_id', $userId)->first(); $settings->language = $data['language']; $settings->timezone = $data['timezone']; $settings->save(); DB::commit(); echo "User settings updated successfully"; } catch (Exception $e) { DB::rollBack(); echo "Update failed: " . $e->getMessage(); } } } ?>

Результат выполнения кода при успешном обновлении:

"User settings updated successfully"

Смотрите также

  • метод beginTransaction,
    который начинает новую транзакцию
  • метод rollBack,
    который отменяет транзакцию
  • метод transaction,
    который автоматически управляет транзакцией
  • метод afterCommit,
    который выполняет действие после фиксации транзакции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить