deliciousbrains/wp-migrations

WordPress 用于管理数据库表结构升级和数据播种的库

2.1 2023-05-04 14:43 UTC

This package is auto-updated.

Last update: 2024-09-04 17:54:29 UTC


README

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

是否曾经需要为某个插件或自定义代码创建自定义表?为了保持该表与最新版本一致,您需要跟踪表的版本。对于许多表,这可能会变得过于复杂。

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

只需使用 WP CLI 在命令行上运行 wp dbi migrate,即可执行尚未运行的任何迁移。

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

要求

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

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

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

安装

  • composer require deliciousbrains/wp-migrations
  • 通过将 \DeliciousBrains\WPMigrations\Database\Migrator::instance(); 添加到 mu-plugin 来引导包。

迁移

默认情况下,命令将在与供应商文件夹并列的 /app/migrations 目录中查找迁移文件。这可以通过 dbi_wp_migrations_path 过滤器进行更改。可以使用 dbi_wp_migrations_paths 过滤器添加其他路径。

迁移文件名应遵循 yyyy_mm_dd_classname 格式,例如 2020_04_09_AddCustomTable.php

创建表的示例迁移如下所示

2020_04_09_AddCustomTable.php

<?php

use DeliciousBrains\WPMigrations\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');
    }
}

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

例如,要添加新页面

<?php

use DeliciousBrains\WPMigrations\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 dbi migrate AddCustomTable

要回滚所有迁移,可以运行 wp dbi migrate --rollback,或只回滚特定迁移 wp dbi migrate AddCustomTable --rollback

要快速生成新迁移,可以运行 wp scaffold migration <name>。例如,wp scaffold migration MyMigration 将在默认迁移文件目录中创建一个名为 MyMigration 的新类,具有正确的文件名和所有必需的样板代码。