has('database.connections.pgsql_admin')) { return; } $defaultConnection = DB::connection('pgsql'); $adminConnection = DB::connection('pgsql_admin'); $adminConnection->setPdo($defaultConnection->getPdo()); $adminConnection->setReadPdo($defaultConnection->getReadPdo()); // Синхронизируем уровень вложенности транзакции: DatabaseTransactions уже // открыл транзакцию на pgsql (тот же PDO) к моменту setUp. Без синхронизации // pgsql_admin считает transactions=0 и при ->transaction() зовёт // PDO->beginTransaction() на уже активной транзакции → PDOException // "There is already an active transaction" (например AdminTenantsController:: // updateBalance). С синхронизацией вложенный transaction() делает SAVEPOINT. $level = $defaultConnection->transactionLevel(); if ($level > 0) { $prop = new \ReflectionProperty(Connection::class, 'transactions'); $prop->setAccessible(true); $prop->setValue($adminConnection, $level); } } }