coenjacobs / migrator
WordPress插件中运行数据库迁移的库
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^5.7
- squizlabs/php_codesniffer: ^3.4
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 功能确保迁移不会运行多次。