prepare( "INSERT INTO %s (%s) VALUES (%s)" ); %s $statement->execute(); return $db->query("SELECT ".static::allowedColumnsSQL()." FROM %s WHERE id=".$db->lastInsertId())->fetch(); } public static function updateObject($object) { $db = Database::getConnection(); $statement = $db->prepare( "UPDATE %s SET %s WHERE id=:id" ); $statement->bindValue(":id", $object["id"]); %s $statement->execute(); } }'; // Запускает процесс генерации public static function run(string $user, string $password, string $db_name) : void { // Получение информации о таблицах и колонках Database::init( 'localhost', 'information_schema', $user, $password ); $db = Database::getConnection(); // Запрос на получение всех таблиц в БД $all_tables = $db->prepare( "SELECT `TABLE_NAME` FROM `TABLES` WHERE `TABLE_SCHEMA`=:table_schema" ); // Запрос на получение всех колонок таблицы $all_columns = $db->prepare( "SELECT `COLUMN_NAME`, `COLUMN_COMMENT`, `COLUMN_KEY`, `IS_NULLABLE` FROM `COLUMNS` WHERE `TABLE_SCHEMA`=:table_schema AND `TABLE_NAME`=:table_name ORDER BY `ORDINAL_POSITION`" ); // Привязка данных $all_tables->bindValue(':table_schema', $db_name); $all_columns->bindValue(':table_schema', $db_name); $all_columns->bindParam(':table_name', $table_name); // Сбор таблиц $all_tables->execute(); $tables = []; while (($row_table = $all_tables->fetch()) !== false) { $table_name = $row_table['TABLE_NAME']; $all_columns->execute(); // Сбор всех колонок таблицы $table_columns = []; while (($row_table_columns = $all_columns->fetch()) !== false) { $table_columns[] = new ModelGeneratorColumn( $row_table_columns['COLUMN_NAME'], $row_table_columns['COLUMN_KEY'] === 'PRI', $row_table_columns['COLUMN_COMMENT'], $row_table_columns['IS_NULLABLE'] === 'YES' ); } // Добавление таблицы в массив $tables[] = new ModelGeneratorTable($table_name, $table_columns); } // Генерация кода define('models_dir', rootdir.'src/Models/'); foreach ($tables as $table) { echo "===Создание файлов для таблицы: ".$table->getName()."===\n"; $class_filename = models_dir.$table->getClassFileName(); $trait_filename = models_dir.$table->getTraitFileName(); if (file_exists($class_filename)) { echo "- Класс уже существует и не будет перезаписан\n"; } else { $fp = fopen($class_filename, 'w'); fwrite($fp, $table->getClassCode(self::$class_template)); fclose($fp); echo "- Класс сгенерирован\n"; } $fp = fopen($trait_filename, 'w'); fwrite($fp, $table->getTraitCode(self::$trait_template)); fclose($fp); echo "- Трейт сгенерирован\n"; echo "Успешно сгенерировано\n\n"; } } }