desaiuditd/enhanced-wp-migrations

WordPress 数据库表架构升级和数据播种管理的库

0.0.4 2020-04-04 10:12 UTC

This package is auto-updated.

Last update: 2024-09-04 20:14:17 UTC


README

一个用于管理数据库表架构升级和数据播种的 WordPress 库。

曾经需要为某些插件或自定义代码创建自定义表吗?为了保持该表与最新版本一致,你需要跟踪表的版本。对于大量表来说,这可能过于复杂。

此包是从 deliciousbrains/wp-migrations 分支出来的,并进行了一些改进。

此包受到 Laravel 的数据库迁移 的启发。你创建一个新的迁移 PHP 文件,添加你的架构更新代码,并可选地包含一个回滚方法以撤销更改。

只需在命令行使用 WP CLI 运行 wp dbi migrate,未运行的任何迁移都将被执行。

使用迁移进行数据库架构和数据更新的好处是,这些更改是文件基础的,因此可以存储在版本控制中,从而在跨不同分支工作时提供更好的控制。

需求

此包旨在用于 WordPress 站点项目,而不是用于插件或主题。

需要运行 PHP 5.4 或更高版本。

需要在服务器上运行 WP CLI 的权限。通常,wp dbi migrate 将作为部署过程中的最后阶段构建步骤运行。

与 wp-migrations 的主要区别

  • 移除了对多个迁移目录的支持。我假设你的所有迁移文件都应位于一个位置。这样,包可以遵循 SemVer 在迁移名称和文件名中(类似于 Flyway)。
  • 每个迁移将与各自的 SemVer 数字标识。例如,11.0.11.1 等。
  • wp edbm migrate 命令将使用迁移的版本号而不是类名。例如,wp edbm migrate 2.0.1
  • 迁移文件命名约定是 <version-number>.php。例如,1.php1.0.1.php2.1.php 等。通常,你可以从 0.0.1.php 开始迁移。
  • 请确保每个迁移文件中只包含一个类。

安装

  • composer require desaiuditd/enhanced-wp-migrations
  • 通过将 \EnhancedWPMigrations\Database\Migrator::instance(); 添加到 mu-plugin 来引导此包。
  • 在服务器上运行 wp edbm migrate --setup

迁移

默认情况下,命令将在与 vendor 文件夹并列的 /app/migrations 目录中查找迁移文件。这可以通过过滤器 edbm_wp_migrations_path 修改。

创建表的示例迁移如下

<!-- 0.0.1.php -->
<?php

use EnhancedWPMigrations\Database\AbstractMigration;

class AddCustomTable extends AbstractMigration {

    public function run() {
        global $wpdb;

        $sql = "
            CREATE TABLE " . $wpdb->prefix . "my_table (
            id bigint(20) NOT NULL auto_increment,
            some_column varchar(50) NOT NULL,
            PRIMARY KEY (id)
            ) {$this->get_collation()};
        ";

        dbDelta( $sql );
    }

    public function rollback() {
        global $wpdb;
        $wpdb->query( 'DROP TABLE ' . $wpdb->prefix . 'my_table');
    }
}

我们还在部署时使用迁移来部署开发数据更改。而不是尝试将开发数据库合并到生产数据库中。

例如,要添加一个新页面

<!-- 0.0.1.php -->
<?php

use EnhancedWPMigrations\Database\AbstractMigration;

class AddPricingPage extends AbstractMigration {

    public function run() {
        $pricing_page_id = wp_insert_post( array(
            'post_title'  => 'Pricing',
            'post_status' => 'publish',
            'post_type'   => 'page',
        ) );
        update_post_meta( $pricing_page_id, '_wp_page_template', 'page-pricing.php' );
    }
}

使用

你可以使用文件名作为参数运行特定的迁移,例如 wp edbm migrate 2.1.1

要回滚所有迁移,可以运行 wp edbm migrate --rollback,或者仅回滚特定的迁移 wp edbm migrate 2.1.1 --rollback