Миграции в WordPress по аналогии с Laravel

Осваиваем практику миграций в WordPress на базе плагина wp-migrations.

Рассмотрим полезную библиотеку WordPress для обновления схем таблиц базы данных и заполнения данных.

WP Migration

A WordPress library for managing database table schema upgrades and data seeding.

Вводные

Когда-либо приходилось создавать пользовательскую таблицу для использования плагина или пользовательского кода? Чтобы поддерживать сайт в актуальном состоянии с последней версией этой таблицы, вам необходимо отслеживать, на какой версии находится таблица. Это может стать излишне сложным для большого количества таблиц.

Этот пакет вдохновлен миграциями базы данных Laravel. Вы создаете новый файл миграции PHP, добавляете код обновления схемы и при необходимости включаете метод отката изменений.

Просто запустите wp dbi migrate в командной строке с помощью WP CLI, и все миграции, которые еще не были выполнены, будут выполнены.

Великое преимущество использования миграций для обновления схемы базы данных и данных состоит в том, что изменения основаны на файлах и, следовательно, могут быть сохранены в системе контроля версий, что дает вам больший контроль при работе с разными ветками.

Требования

Этот пакет предназначен для использования в проекте сайта WordPress, а не плагина или темы.

Для его работы требуется PHP версии 5.3 или выше.

У вас должен быть доступ для запуска WP CLI на сервере. Обычно wp dbi migrate запускается в качестве последнего этапа сборки в процессе развертывания.

Установка

  • composer require deliciousbrains/wp-migrations
  • Инициализируйте пакет, добавив \DeliciousBrains\WPMigrations\Database\Migrator::instance(); в mu-плагин.

Миграции

По умолчанию, команда будет искать файлы миграции в каталоге /app/migrations рядом с каталогом поставщика. Это можно изменить с помощью фильтра dbi_wp_migrations_path. Другие пути могут быть добавлены с помощью фильтра dbi_wp_migrations_paths.

Имена файлов миграции должны соответствовать формату yyyy_mm_dd_имякласса, например, 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 <имя>. Например, wp scaffold migration MyMigration создаст новый класс с именем MyMigration в каталоге файлов миграции по умолчанию с правильным именем файла и всем необходимым шаблонным кодом.

Фото аватара
Antony I

Веб разработчик, специализация на лучших мировых практиках: WordPress, WooCommerce, NextJS, Strapi, JAMStack ...

Основные типы проектов: CMS, eCommerce, SEO, LMS, ECM, BPM

Подробнее...

Статей: 113

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *