coenjacobs/migrator

WordPress插件中运行数据库迁移的库

0.2.0 2019-02-05 16:20 UTC

This package is auto-updated.

Last update: 2024-09-19 07:30:19 UTC


README

Migrator 允许您根据WordPress插件的具体需求在数据库上运行迁移。这可能包括添加或删除表、更改表结构或更改表中的数据。

此包需要PHP 7.2或更高版本才能运行工具。

警告:此包非常实验性,在版本1.0.0标记之前可能会有破坏性更改。请谨慎使用,在生产环境中使用时请始终佩戴头盔。

安装

此包最好通过使用Composer在您的插件内部安装

composer require coenjacobs/migrator

当与Mozart包一起安装此库时,可以达到最佳效果,因此Migrator将在您的命名空间中安装,以防止冲突。

工作者

工作者类负责实际执行迁移所需的查询。默认情况下,有一个基于$wpdb的工作者类可用,在CoenJacobs\Migrator\Workers\WpdbWorker类中。此利用WordPress安装中的默认$wpdb全局变量来运行您的查询。您可以提供自己的工作者类实现,只要它们实现了CoenJacobs\Migrator\Contracts\Worker接口。

记录器

记录器负责注册已运行的迁移。这是为了确保没有迁移被多次运行。默认情况下,有一个基于数据库的记录器类可用,在CoenJacobs\Migrator\Loggers\DatabaseLogger类中。此类实际上使用上述基于$wpdb的工作者来将迁移数据记录到特定的数据库表中。此数据库表将使用您提供的第一个构造函数参数作为表名创建。

您可以提供自己的记录器类实现,只要它们实现了CoenJacobs\Migrator\Contracts\Logger接口。

迁移结构

所有迁移都必须遵循特定的格式,由CoenJacobs\Migrator\Contracts\Migration.php接口强制执行。此接口将强制您提供一个静态的id()方法,该方法需要提供迁移的唯一标识符。该接口还强制迁移类包含以下两个方法:up()down()。这两个方法用于运行和回滚迁移。

有一个帮助类BaseMigration可用,以帮助设置迁移所需的正确变量,例如工作者。

一个基本的迁移示例如下所示

<?php

namespace YourPlugin\Migrations;

use CoenJacobs\Migrator\Migrations\BaseMigration;

class CreateTestTable extends BaseMigration
{
    public static function id()
    {
        return 'yourplugin-1-test-table';
    }

    public function up()
    {
        $tableName = $this->worker->getPrefix() . 'yourplugin_test';

        $query = "CREATE TABLE $tableName (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
            testvarchar VARCHAR(255) NOT NULL )";

        $this->worker->query($query);
    }

    public function down()
    {
        $tableName = $this->worker->getPrefix() . 'yourplugin_test';

        $query = "DROP TABLE $tableName";
        $this->worker->query($query);
    }
}

注册迁移

为了使此库运行您的迁移,需要将迁移添加到处理器。处理器是该库的核心类,负责按照正确的顺序运行迁移。

处理器需要提供工作者和记录器才能进行设置

use CoenJacobs\Migrator\Handler;
use CoenJacobs\Migrator\Loggers\DatabaseLogger;
use CoenJacobs\Migrator\Workers\WpdbWorker;

$worker = new WpdbWorker();
$logger = new DatabaseLogger('migrations_table_name');
$handler = new Handler($worker, $logger);

然后,处理器就准备好接受新的迁移添加,在它们可以运行之前。您传递类的字符串表示形式作为类名,其中类本身再次实现了CoenJacobs\Migrator\Contracts\Migration接口

use YourPlugin\Migrations\CreateTestTable

$migrator->add('yourplugin', CreateTestTable::class);

$migration->add() 方法的第一个参数应该是您插件的唯一标识符。处理器会根据每个插件运行迁移,使用这个唯一标识符作为键来调用需要运行的正确迁移。

运行迁移

设置迁移后,运行迁移就像运行 $migration->up() 方法一样简单,第一个参数是您插件的唯一标识符

$migrator->up('yourplugin');

这将运行使用唯一标识符添加的所有迁移,除了已经运行过的迁移。Logger 功能确保迁移不会运行多次。