true - таблица существует, false - не существует. */ public function IsTableExist (string $tableName): bool { // Получаю систему управления таблицами БД $dbDrv = match ($this->Config->Driver) { DBDriver::MySQL => new MySQLTableManager(), DBDriver::MSSQL => new MSSQLTableManager(), DBDriver::PostgreSQL => new PostgreSQLTableManager(), DBDriver::OracleDB => new OracleDBTableManager(), DBDriver::SQLite => new SQLiteTableManager() }; // Проверяю существование таблицы, вывожу результат return $dbDrv->isTableExist($this->DataBaseHandle, $tableName); } /** * Создаёт новую таблицу. * * @param string $tableName Имя таблицы. * @param string $dbItemClass Класс моделей, которых будет представлять эта таблица. * * @return bool Результат создания: true, если таблица создана и false, если * произошла ошибка. */ public function CreateTable (string $tableName, string $dbItemClass): bool { // Создаю экземпляр класса $instance = new $dbItemClass(); // Проверяю, что он реализует интерфейс IDBItem if (!$instance instanceof IDBItem) // - если нет, ошибка return false; // Получаю свойства класса $properties = self::GetProperties($instance, DBOperation::CreateTable); // Создаю массив столбцов $columns = new ObjectArray(); /** * Для каждого свойства... * * @var DBItemProperty $property Свойство. */ foreach ($properties as $property) // - добавляю его столбцы в массив столбцов $columns->Add($property->Column); // Получаю систему управления таблицами БД $dbDrv = match ($this->Config->Driver) { DBDriver::MySQL => new MySQLTableManager(), DBDriver::MSSQL => new MSSQLTableManager(), DBDriver::PostgreSQL => new PostgreSQLTableManager(), DBDriver::OracleDB => new OracleDBTableManager(), DBDriver::SQLite => new SQLiteTableManager() }; try { // Активирую транзакцию $this->InitTransaction(); // Создаю таблицу и возвращаю результат $result = $dbDrv->CreateTable($this->DataBaseHandle, $tableName, $columns); // Отправляю данные в БД $this->Commit(); // Возвращаю результат return $result; } catch (Exception $exception) { // - в случае ошибки, пытаюсь откатиться назад $this->RollBack(); // - обрабатываю исключение $this->HandleException($exception, false); // - возвращаю провал return false; } } /** * Удаляет таблицу. * * @param string $tableName Имя удаляемой таблицы. * * @return bool Результат удаления: true - таблица удалена, false - произошла * неизвестная ошибка при удалении. */ public function DropTable (string $tableName): bool { // Если таблицы не существует или она уже удалена if (!$this->IsTableExist($tableName)) // - то возвращаем true return true; // SQL-запрос $sql = "DROP TABLE dbo.`$tableName`"; // Инициализирую транзакцию $this->InitTransaction(); // Выполняю SQL-запрос удаления $result = $this->Execute($sql); // Если неудачно if ($result === false) { // - то откатываю изменения $this->RollBack(); // - возвращаю провал return false; } try { // Пытаюсь отправить изменения $this->Commit(); } catch (Exception $exception) { // - в случае ошибки, откатываю изменения $this->RollBack(); // - описываю ошибку $this->HandleException($exception, false); // - возвращаю провал return false; } // Возвращаю, существует ли теперь таблица return $this->IsTableExist($tableName); } }