master

laravel/framework

Last updated at: 29/12/2023 09:23

DatabaseTransactionsManager.php

TLDR

This file is the implementation of the DatabaseTransactionsManager class in the Illuminate\Foundation\Testing namespace. It extends the DatabaseTransactionsManager class from the Illuminate\Database namespace.

Methods

addCallback

This method registers a callback to be executed after a transaction is committed.

callbackApplicableTransactions

This method returns a collection of transactions that are applicable to callbacks.

afterCommitCallbacksShouldBeExecuted

This method determines if after commit callbacks should be executed for the given transaction level.

Classes

DatabaseTransactionsManager

This is a class that extends the DatabaseTransactionsManager class from the Illuminate\Database namespace. It provides additional functionality related to managing database transactions in testing.

<?php

namespace Illuminate\Foundation\Testing;

use Illuminate\Database\DatabaseTransactionsManager as BaseManager;

class DatabaseTransactionsManager extends BaseManager
{
    /**
     * Register a transaction callback.
     *
     * @param  callable  $callback
     * @return void
     */
    public function addCallback($callback)
    {
        // If there are no transactions, we'll run the callbacks right away. Also, we'll run it
        // right away when we're in test mode and we only have the wrapping transaction. For
        // every other case, we'll queue up the callback to run after the commit happens.
        if ($this->callbackApplicableTransactions()->count() === 0) {
            return $callback();
        }

        $this->pendingTransactions->last()->addCallback($callback);
    }

    /**
     * Get the transactions that are applicable to callbacks.
     *
     * @return \Illuminate\Support\Collection<int, \Illuminate\Database\DatabaseTransactionRecord>
     */
    public function callbackApplicableTransactions()
    {
        return $this->pendingTransactions->skip(1)->values();
    }

    /**
     * Determine if after commit callbacks should be executed for the given transaction level.
     *
     * @param  int  $level
     * @return bool
     */
    public function afterCommitCallbacksShouldBeExecuted($level)
    {
        return $level === 1;
    }
}