Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Database/DatabaseTransactionsManager.php
Строк: 198
<?php

namespace IlluminateDatabase;

class 
DatabaseTransactionsManager
{
    
/**
     * All of the recorded transactions.
     *
     * @var IlluminateSupportCollection
     */
    
protected $transactions;

    
/**
     * The database transaction that should be ignored by callbacks.
     *
     * @var IlluminateDatabaseDatabaseTransactionRecord
     */
    
protected $callbacksShouldIgnore;

    
/**
     * Create a new database transactions manager instance.
     *
     * @return void
     */
    
public function __construct()
    {
        
$this->transactions collect();
    }

    
/**
     * Start a new database transaction.
     *
     * @param  string  $connection
     * @param  int  $level
     * @return void
     */
    
public function begin($connection$level)
    {
        
$this->transactions->push(
            new 
DatabaseTransactionRecord($connection$level)
        );
    }

    
/**
     * Rollback the active database transaction.
     *
     * @param  string  $connection
     * @param  int  $level
     * @return void
     */
    
public function rollback($connection$level)
    {
        
$this->transactions $this->transactions->reject(
            
fn ($transaction) => $transaction->connection == $connection && $transaction->level $level
        
)->values();

        if (
$this->transactions->isEmpty()) {
            
$this->callbacksShouldIgnore null;
        }
    }

    
/**
     * Commit the active database transaction.
     *
     * @param  string  $connection
     * @return void
     */
    
public function commit($connection)
    {
        [
$forThisConnection$forOtherConnections] = $this->transactions->partition(
            
fn ($transaction) => $transaction->connection == $connection
        
);

        
$this->transactions $forOtherConnections->values();

        
$forThisConnection->map->executeCallbacks();

        if (
$this->transactions->isEmpty()) {
            
$this->callbacksShouldIgnore null;
        }
    }

    
/**
     * Register a transaction callback.
     *
     * @param  callable  $callback
     * @return void
     */
    
public function addCallback($callback)
    {
        if (
$current $this->callbackApplicableTransactions()->last()) {
            return 
$current->addCallback($callback);
        }

        
$callback();
    }

    
/**
     * Specify that callbacks should ignore the given transaction when determining if they should be executed.
     *
     * @param  IlluminateDatabaseDatabaseTransactionRecord  $transaction
     * @return $this
     */
    
public function callbacksShouldIgnore(DatabaseTransactionRecord $transaction)
    {
        
$this->callbacksShouldIgnore $transaction;

        return 
$this;
    }

    
/**
     * Get the transactions that are applicable to callbacks.
     *
     * @return IlluminateSupportCollection
     */
    
public function callbackApplicableTransactions()
    {
        return 
$this->transactions->reject(function ($transaction) {
            return 
$transaction === $this->callbacksShouldIgnore;
        })->
values();
    }

    
/**
     * Get all the transactions.
     *
     * @return IlluminateSupportCollection
     */
    
public function getTransactions()
    {
        return 
$this->transactions;
    }
}
Онлайн: 1
Реклама