sirodiaz / manticore-migration
此包已被弃用且不再维护。作者建议使用https://github.com/trysharpen/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 应用程序的架构
- 可执行脚本(bin/versionna)
- 添加命令
- list
- make:config
- make:migration
- migration:list:pending
- migration:list:migrated
- migrate
- rollback
- 带有 --steps 的回滚
- fresh
- refresh
- 带有 --steps 的 refresh
- reset
- status
- help
- 添加支持多个数据库引擎方言的驱动程序
- 添加 SQLite 驱动程序
- 添加 MySQL 驱动程序
- 添加 PostgreSQL 驱动程序
- 创建 Laravel 包
- 创建 Symfony 包
安装
composer require sharpen/versionna
用法
首先,您需要安装此包。
composer require sharpen/versionna
安装后,您需要创建一个目录。该目录将包含按创建日期排序的迁移文件。
您有两种不同的方式使用此包
- 程序化
- CLI
您可以使用程序方式创建自己的 versionna
集成,如在此存储库中的 examples 目录中所见。
在这些文档的每个部分中,您将看到两种版本:程序化和 CLI 版本以创建、迁移、回滚、列出已应用和挂起的迁移。
创建迁移
CLI
要创建迁移文件,您必须使用 make:migration 和类名(扩展 Migration 类的迁移类名)使用蛇形命名法。此类名应为一个描述性的名称。较长的名称更好,原因有两个
- 更好地理解迁移做什么
- 并避免重复的类名
./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';
应用迁移
命令行界面
使用命令行界面,有两种可用的命令来应用挂起的迁移
./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';
回滚迁移
命令行界面
使用命令行界面,有两种可用的命令来回滚已应用的迁移
./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);
列出已应用迁移的历史记录
命令行界面
使用命令行工具列出挂起的迁移
./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'; }
列出挂起的迁移
命令行界面
使用命令行工具列出挂起的迁移
./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'; }