sharpen / versionna
Manticoresearch 迁移工具。在您的应用程序中以编程方式保持索引模式最新
1.0
2022-12-30 13:26 UTC
Requires
- php: >=8.0
- manticoresoftware/manticoresearch-php: ^1.8
- nyholm/dsn: ^2.0
- symfony/console: ^5.4.9
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- phpro/grumphp-shim: ^1.12
- phpstan/phpstan: ^1.6
- phpunit/phpunit: ^9.0
README
Manticoresearch 迁移工具。使用可执行 CLI 脚本或将其集成到您的应用程序代码中以保持索引模式最新。
目录
项目进度和路线图
- 添加 CI 管道
- 添加支持的 PHP 版本
- 8.0
- 8.1
- 8.2
- PhpStan
- PHPUnit 运行测试
- 添加支持的 PHP 版本
- 预提交代码检查和测试
- 添加 Grumphp
- PhpStan
- PHPUnit
- 添加 Grumphp
- 添加日志实现
- 添加用于测试和开发的 docker-compose 堆栈文件
- 添加代码文档
- 编写一个完整的 README 文件,解释所有内容
- 添加单元和集成测试
- 添加命令行界面功能
- 添加 CLI 应用程序元数据,如名称、描述等。
- 创建 CLI 应用程序的架构
- 可执行脚本 (bin/versionna)
- 添加命令
- list
- make:config
- make:migration
- migration:list:pending
- migration:list:migrated
- migrate
- rollback
- 使用 --steps 回滚
- fresh
- refresh
- 使用 --steps refresh
- reset
- 状态
- 帮助
- 添加支持多个数据库引擎方言的驱动程序
- 添加 SQLite 驱动程序
- 添加 MySQL 驱动程序
- 添加 PostgreSQL 驱动程序
- 创建 Laravel 扩展包
- 创建 Symfony 扩展包
安装
composer require sharpen/versionna
使用
首先,您需要安装此包。
composer require sharpen/versionna
安装后,您需要创建一个目录。该目录将包含按创建日期排序的迁移文件。
您可以使用两种不同的方式使用此包:
- 编程
- CLI
您可以使用与 versionna
的集成来创建自己的程序化方式,如在本存储库中的 examples 目录中所示。
在这些文档的每个部分中,您将看到两种版本:编程和 CLI,用于创建、迁移、回滚、列出已应用和待处理的迁移。
创建迁移
CLI
要创建迁移文件,您必须使用 make:migration 命令和类名(扩展 Migration 类的迁移类名),使用 snake_case_style。该类名应该是一个描述性的名称。更长的名称更好,原因如下:
- 更好地理解迁移的作用
- 避免重复的类名
./vendor/bin/versionna make:migration -c config.php create_products_index
编程
<?php use Sharpen\Versionna\MigrationCreator; $configuration = require 'config.php'; $migrationName = 'create_users_index'; $description = 'users initial definition of the rt index'; $migrationCreator = new MigrationCreator( $configuration['migrations_path'], $migrationName, $description, ); $migrationCreator->create(); echo 'Migration created successfully';
应用迁移
CLI
有两种可用的命令可用于使用命令行界面应用待处理的迁移:
./vendor/bin/versionna migrate -c config.php
./vendor/bin/versionna migrate:up -c config.php
编程
<?php use Sharpen\Versionna\Manticore\ManticoreConnection; use Sharpen\Versionna\MigrationDirector; use Sharpen\Versionna\Storage\DatabaseConfiguration; use Sharpen\Versionna\Storage\DatabaseConnection; use Sharpen\Versionna\Storage\MigrationTable; $configuration = require 'config.php'; $dbConnection = new DatabaseConnection( DatabaseConfiguration::fromArray( $configuration['connections']['mysql'] ) ); $manticoreConnection = new ManticoreConnection( $configuration['manticore_connection']['host'], $configuration['manticore_connection']['port'], ); $migrationTable = new MigrationTable( $dbConnection, $configuration['table_prefix'], $configuration['migration_table'], ); $director = new MigrationDirector(); $director ->dbConnection($dbConnection) ->manticoreConnection($manticoreConnection) ->migrationsPath($configuration['migrations_path']) ->migrationTable($migrationTable); if (! $migrationTable->exists()) { echo 'Migration table doesn\'t exist'; exit(1); } elseif (! $director->hasPendingMigrations()) { echo 'No pending migrations'; exit(0); } try { $director->migrate(); } catch (Exception $exception) { echo $exception->getMessage(); exit(1); } echo 'Applied all migrations';
回滚迁移
CLI
有两种可用的命令可用于使用命令行界面回滚已应用的迁移:
./vendor/bin/versionna rollback -c config.php
./vendor/bin/versionna migrate:down -c config.php
编程
<?php use Sharpen\Versionna\Manticore\ManticoreConnection; use Sharpen\Versionna\MigrationDirector; use Sharpen\Versionna\Storage\DatabaseConfiguration; use Sharpen\Versionna\Storage\DatabaseConnection; use Sharpen\Versionna\Storage\MigrationTable; $configuration = require 'config.php'; $dbConnection = new DatabaseConnection( DatabaseConfiguration::fromArray( $configuration['connections']['mysql'] ), ); $manticoreConnection = new ManticoreConnection( $configuration['manticore_connection']['host'], $configuration['manticore_connection']['port'], ); $migrationTable = new MigrationTable( $dbConnection, $configuration['table_prefix'], $configuration['migration_table'] ); $director = new MigrationDirector(); $director ->dbConnection($dbConnection) ->manticoreConnection($manticoreConnection) ->migrationsPath($configuration['migrations_path']) ->migrationTable($migrationTable); $steps = 1; $director->undoMigrations($steps);
列出应用迁移的历史记录
CLI
要使用命令行工具列出待处理的迁移
./vendor/bin/versionna migration:list:pending -c config.php
编程
<?php $configuration = require 'config.php'; $dbConnection = new DatabaseConnection( DatabaseConfiguration::fromArray( $configuration['connections']['mysql'] ) ); $migrationTable = new MigrationTable( $dbConnection, $configuration['table_prefix'], $configuration['migration_table'] ); $ascending = false; $migrations = $migrationTable->getAll($ascending); if ($migrations) { $migrationsDone = array_map( function ($migration) { return $migration->toArray(); }, $migrations, ); var_dump($migrationsDone); } else { echo 'The migration table is empty'; }
列出待处理的迁移
CLI
要使用命令行工具列出待处理的迁移
./vendor/bin/versionna migration:list:pending -c config.php
编程
<?php use Sharpen\Versionna\Manticore\ManticoreConnection; use Sharpen\Versionna\MigrationDirector; use Sharpen\Versionna\Storage\DatabaseConfiguration; use Sharpen\Versionna\Storage\DatabaseConnection; use Sharpen\Versionna\Storage\MigrationTable; $dbConnection = new DatabaseConnection( DatabaseConfiguration::fromArray( $configuration['connections'][$connection] ) ); $manticoreConnection = new ManticoreConnection( $configuration['manticore_connection']['host'], $configuration['manticore_connection']['port'], ); $migrationTable = new MigrationTable( $dbConnection, $configuration['table_prefix'], $configuration['migration_table'] ); $director = new MigrationDirector(); $director ->dbConnection($dbConnection) ->manticoreConnection($manticoreConnection) ->migrationsPath($configuration['migrations_path']) ->migrationTable($migrationTable); $pendingMigrations = $director->getPendingMigrations(); if (count($pendingMigrations) > 0) { array_map( function ($migration) { return ['name' => $migration]; }, array_values(array_keys($pendingMigrations)), ); } else { echo 'ManticoreSearch is up to date! no pending migrations'; }