20250801
This commit is contained in:
@@ -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 Возвращает [запрос, параметры запроса].
|
||||
*/
|
||||
|
Reference in New Issue
Block a user