This commit is contained in:
2025-08-01 18:29:11 +03:00
parent 2f3dd81d0a
commit ccdcc3e047
10 changed files with 1226 additions and 51 deletions

View File

@@ -8,10 +8,10 @@
use Exception;
use goodboyalex\php_components_pack\classes\Tuple;
use goodboyalex\php_db_components_pack\enums\DBDriver;
use goodboyalex\php_db_components_pack\enums\DBOperation;
use goodboyalex\php_db_components_pack\interfaces\IDBItem;
use PDO;
use PDOException;
/**
* Трейт для работы со вставкой строк в базу данных.
@@ -46,23 +46,17 @@
// - то и общий результат - false
return false;
$lastId = -1;
// Задаю переменную для последнего id
$lastId = match ($this->Config->Driver) {
DBDriver::MSSQL => $this->DataBaseHandle->query('SELECT SCOPE_IDENTITY()')->fetchColumn(),
DBDriver::MySQL, DBDriver::SQLite => $this->DataBaseHandle->lastInsertId(),
DBDriver::PostgreSQL, DBDriver::OracleDB => $this->DataBaseHandle->lastInsertId('sequence_name')
};
try {
// Получаю последний id этой записи
$lastIdResult = $this->DataBaseHandle->lastInsertId();
// Если получение неудачное
if ($lastIdResult === false)
// - то вывожу -1
return $lastId;
// Устанавливаю последний id
$lastId = $lastIdResult;
}
catch (PDOException $e) {
$this->HandleException($e);
}
// Если id не получен
if ($lastId === false)
// - то вывожу просто true
$lastId = true;
// Вывожу последний id
return $lastId;
@@ -72,33 +66,38 @@
* Вставляет несколько строк в базу данных.
*
* @param string $table Имя таблицы.
* @param array $options Параметры.
* @param IDBItem ...$sources Модели или классы, реализующие интерфейс IDBItem, для вставки.
*
* @return void
* @return false|array Возвращает массив id созданных записей и <code>false</code>, если ошибка.
*/
public function InsertMany (string $table, array $options, IDBItem ...$sources): void
public function InsertMany (string $table, IDBItem ...$sources): false|array
{
// Инициализирую транзакцию
$this->InitTransaction();
// Подготавливаю массив последних id
$result = [];
try {
// Для каждого источника
foreach ($sources as $source)
// - вставляю строку
$this->Insert($table, $source, $options);
$result[] = $this->Insert($table, $source);
// Если вставка успешна, то подтверждаю транзакцию
$this->Commit();
}
catch (Exception $exception) {
catch (Exception) {
// - если ошибка, то откатываю транзакцию
$this->RollBack();
// - и вывожу ошибку
$this->HandleException($exception);
return false;
}
// Вывожу результат
return $result;
}
/**
@@ -106,7 +105,6 @@
*
* @param string $table Имя таблицы.
* @param IDBItem $row Элемент.
* @param array $options Параметры.
*
* @return Tuple Возвращает [запрос, параметры запроса].
*/