|
@@ -1,135 +0,0 @@
|
|
|
-<?php
|
|
|
-
|
|
|
-namespace BotKit\Tools;
|
|
|
-
|
|
|
-// Класс генерации исходных файлов моделей
|
|
|
-
|
|
|
-use BotKit\Common\Database;
|
|
|
-
|
|
|
-class ModelCodeGenerator {
|
|
|
-
|
|
|
- // Шаблон для класса
|
|
|
- private static string $class_template =
|
|
|
-'<?php
|
|
|
-
|
|
|
-namespace BotKit\Models;
|
|
|
-
|
|
|
-class %sModel extends Model {
|
|
|
- use %s;
|
|
|
- protected static $allowed_columns = ["*"];
|
|
|
-}';
|
|
|
-
|
|
|
- // Шаблон для трейта
|
|
|
- private static string $trait_template =
|
|
|
-'<?php
|
|
|
-// Внимание! При повторном выполнении скрипта генерации моделей этот файл будет ПЕРЕЗАПИСАН
|
|
|
-// Прописывайте бизнес-логику в классах, а не в трейтах
|
|
|
-
|
|
|
-namespace BotKit\Models;
|
|
|
-
|
|
|
-use BotKit\Common\Database;
|
|
|
-
|
|
|
-trait %s {
|
|
|
- protected static string $table_name = "%s";
|
|
|
-
|
|
|
- // Пояснения колонок:
|
|
|
-%s
|
|
|
- public static function create(%s) {
|
|
|
- $db = Database::getConnection();
|
|
|
- $statement = $db->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";
|
|
|
- }
|
|
|
- }
|
|
|
-}
|