LaravelLaravel20 min read

Database Transactions: Keep Data Consistent

Learn how to use database transactions in Laravel so multiple database changes succeed together or rollback safely.

Hannah Price
October 23, 2025
1.9k90

In real applications, a single action often updates multiple tables. If one update fails and others succeed, your data becomes inconsistent. Transactions solve this by making the entire operation atomic.

    Common examples:
    - Creating an order and its order items
    - Charging a payment and saving an invoice
    - Moving funds between two accounts
    
    ## Using DB::transaction
    
    ```php
    use Illuminate\Support\Facades\DB;
    
    DB::transaction(function () use ($userId) {
      $orderId = DB::table('orders')->insertGetId([
        'user_id' => $userId,
        'total' => 120,
        'created_at' => now(),
        'updated_at' => now(),
      ]);
    
      DB::table('order_items')->insert([
        'order_id' => $orderId,
        'product_id' => 7,
        'qty' => 2,
        'price' => 60,
        'created_at' => now(),
        'updated_at' => now(),
      ]);
    });
    ```
    
    If anything throws an exception inside the callback, Laravel rolls back automatically.
    
    ## Graph: Transaction behavior
    
    ```mermaid
    flowchart TD
      A[Begin Transaction] --> B[Insert Order]
      B --> C[Insert Items]
      C --> D{All OK?}
      D -->|Yes| E[Commit]
      D -->|No| F[Rollback]
    ```
    
    In the next tutorial, we will prevent race conditions using row locking.
#Laravel#Database#Advanced