20250729
This commit is contained in:
98
sources/traits/Database/DatabaseTransactions.php
Normal file
98
sources/traits/Database/DatabaseTransactions.php
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\traits\Database;
|
||||
|
||||
use PDO;
|
||||
use PDOException;
|
||||
|
||||
/**
|
||||
* Трейт для работы с транзакциями базы данных.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
* @see PDO
|
||||
*/
|
||||
trait DatabaseTransactions
|
||||
{
|
||||
/**
|
||||
* Начинает транзакцию.
|
||||
*
|
||||
* @return void
|
||||
* @throws PDOException Если транзакция уже начата или не удалось начать.
|
||||
*/
|
||||
public function InitTransaction (): void
|
||||
{
|
||||
// Проверка, не находится ли текущая транзакция в процессе.
|
||||
if ($this->InTransaction())
|
||||
// - если находится, то выбрасываем исключение.
|
||||
throw new PDOException("Транзакция уже начата! / Transaction already started!");
|
||||
|
||||
// Начинаем транзакцию
|
||||
$isSuccess = $this->DataBaseHandle->beginTransaction();
|
||||
|
||||
// Если транзакция не началась
|
||||
if (!$isSuccess)
|
||||
// - то выбрасываем исключение.
|
||||
throw new PDOException("Ошибка при начале транзакции! / Transaction start error!");
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, находится ли текущая транзакция в процессе.
|
||||
*
|
||||
* @return bool Результат проверки: <code>true</code> - в процессе, <code>false</code> - нет.
|
||||
*/
|
||||
public function InTransaction (): bool
|
||||
{
|
||||
return $this->DataBaseHandle->inTransaction();
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет транзакцию в базу данных.
|
||||
*
|
||||
* @return void
|
||||
* @throws PDOException Если транзакция не начата или не отправлена.
|
||||
*/
|
||||
public function Commit (): void
|
||||
{
|
||||
// Проверка, не находится ли текущая транзакция в процессе
|
||||
if (!$this->InTransaction())
|
||||
// - если нет, то выбрасываем исключение.
|
||||
throw new PDOException("Транзакция не начата! / Transaction not started!");
|
||||
|
||||
// Отправляем транзакцию в базу данных
|
||||
$isSuccess = $this->DataBaseHandle->commit();
|
||||
|
||||
// Если транзакция не отправлена
|
||||
if (!$isSuccess)
|
||||
// - то выбрасываем исключение.
|
||||
throw new PDOException("Ошибка при отправке транзакции в базу данных! / Transaction send error!");
|
||||
}
|
||||
|
||||
/**
|
||||
* Откатывает транзакцию.
|
||||
*
|
||||
* @return void
|
||||
* @throws PDOException Если транзакция не начата или не откатана.
|
||||
*/
|
||||
public function RollBack (): void
|
||||
{
|
||||
// Проверка, не находится ли текущая транзакция в процессе
|
||||
if (!$this->InTransaction())
|
||||
// - если нет, то выбрасываем исключение.
|
||||
throw new PDOException("Транзакция не начата! / Transaction not started!");
|
||||
|
||||
// Откатываем транзакцию
|
||||
$isSuccess = $this->DataBaseHandle->rollBack();
|
||||
|
||||
// Если транзакция не откатана
|
||||
if (!$isSuccess)
|
||||
// - то выбрасываем исключение.
|
||||
throw new PDOException("Ошибка при откате транзакции! / Transaction rollback error!");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user