sirodiaz/manticore-migration

此包已被弃用且不再维护。作者建议使用https://github.com/trysharpen/versionna 包。

Manticoresearch 迁移工具。通过程序方式在您的应用程序中保持索引模式最新

1.0 2022-12-30 13:26 UTC

This package is auto-updated.

Last update: 2022-12-31 10:45:59 UTC


README

Latest Version on Packagist tests phpstan Total Downloads

Manticoresearch 迁移工具。使用可执行的 CLI 脚本或将其集成到您的应用程序代码中,以保持索引模式最新。

migrate and migrate:down

目录

项目进度和路线图

  • 添加 CI 流水线
    • 添加支持的 PHP 版本
      • 8.0
      • 8.1
      • 8.2
    • PhpStan
    • PHPUnit 运行测试
  • 提交前检查器及测试检查
    • 添加 Grumphp
      • PhpStan
      • PHPUnit
  • 添加日志实现
  • 为测试和开发添加 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';

应用迁移

migrate and migrate:down

命令行界面

使用命令行界面,有两种可用的命令来应用挂起的迁移

./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';

回滚迁移

migrate and migrate:down

命令行界面

使用命令行界面,有两种可用的命令来回滚已应用的迁移

./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);

列出已应用迁移的历史记录

migration:list:migrated

命令行界面

使用命令行工具列出挂起的迁移

./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';
}

列出挂起的迁移

migration:list:pending

命令行界面

使用命令行工具列出挂起的迁移

./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';
}