sharpen/versionna

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

1.0 2022-12-30 13:26 UTC

This package is auto-updated.

Last update: 2024-08-29 05:56:30 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 应用程序元数据,如名称、描述等。
    • 创建 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';

应用迁移

migrate and migrate:down

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

回滚迁移

migrate and migrate:down

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

列出应用迁移的历史记录

migration:list:migrated

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

列出待处理的迁移

migration:list:pending

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