deliciousbrains / wp-migrations
WordPress 用于管理数据库表结构升级和数据播种的库
Requires
- wp-cli/wp-cli: ^2.2.0
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
的新类,具有正确的文件名和所有必需的样板代码。