marvin255/bxmigrate

此包已被废弃且不再维护。未建议替代包。

比特rix的迁移

3.0.6 2018-09-06 05:15 UTC

README

Latest Stable Version License Build Status

为1С Битрикс实现控制台迁移。

安装

通过Composer安装。

在您的项目文件夹中执行命令

composer require marvin255/bxmigrate:~3.0

描述

迁移将数据库中的任何更改固定到文件中。这允许通过项目仓库传递数据库更改。

迁移由五个元素组成

  1. 迁移对象 - 具有唯一类名对象,具有up方法将迁移应用于数据库,以及down方法在数据库中取消迁移,这些方法由希望更改数据库的人实现。

  2. 迁移存储对象 - 返回包含所有可用迁移的对象数组,允许创建新的迁移。

  3. 迁移状态对象 - 允许检查迁移是否已应用,并标记迁移为已应用或取消应用。

  4. 迁移管理对象 - 将所有前述对象的工作统一在一起,允许应用迁移、取消迁移、创建新迁移,为此,它将控制权传递给上述描述中的一个对象。

  5. 通知对象 - 向用户输出迁移执行结果的消息(使用psr/log日志接口)。

与迁移交互的算法

首先,需要创建一个控制台脚本,该脚本允许在控制台中使用1С Битрикс。例如,使用Symfony console实现此类脚本的示例。

#!/usr/bin/env php
<?php

//Данный файл называется cli.php и расположен на уровень выше document root веб-сервера (папка web).
$_SERVER['DOCUMENT_ROOT'] = realpath(__DIR__ . '/web');
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

//Папка с миграциями должна быть создана и находиться рядом с этим скриптом (папка migrations).
define('CLI_MIGRATIONS_PATH', __DIR__ . '/migrations');

//Отключаем сбор статистики, проверку событий и агентов.
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('CHK_EVENT', true);

//Подключаем загрузку классов composer.
//Файл composer.json расположен на том же уровне, что и данный файл.
//Все зависимости из composer установлены.
require_once __DIR__ . '/vendor/autoload.php';

//Подключаем ядро битрикса.
require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';

//Создаем приложение Symfony console.
$application = new \Symfony\Component\Console\Application;

//Регистрируем команды для миграций.
\marvin255\bxmigrate\cli\Factory::registerCommands($application, CLI_MIGRATIONS_PATH);

//Запускаем приложение на исполнение.
$application->run();

脚本创建后,算法与任何其他php迁移相同

  1. 使用命令php cli.php bxmigrate:create new_migration创建迁移

  2. migrations目录中查找名为migrate_{TIMESTAMP_СОЗДАНИЯ_МИГРАЦИИ}_new_migration.php的迁移

  3. 实现up和down方法,例如

    <?php
    
    /**
     * Миграция для создания типа инфоблока 'Structure'.
     */
    class migrate_/*TIMESTAMP_СОЗДАНИЯ_МИГРАЦИИ*/_new_migration extends \marvin255\bxmigrate\migrate\Coded
    {
        public function up()
        {
            return $this->IblockTypeCreate([
                'ID' => 'structure',
                'SECTIONS' => 'Y',
                'IN_RSS' => 'N',
                'SORT' => 500,
                'EDIT_FILE_BEFORE' => '',
                'EDIT_FILE_AFTER' => '',
                'LANG' => [
                    'en' => [
                        'NAME' => 'Structure',
                        'SECTION_NAME' => '',
                        'ELEMENT_NAME' => '',
                    ],
                    'ru' => [
                        'NAME' => 'Структура сайта',
                        'SECTION_NAME' => '',
                        'ELEMENT_NAME' => '',
                    ],
                ],
            ]);
        }
    
        public function down()
        {
            return $this->IblockTypeDelete('structure');
        }
    }
  4. 使用命令php cli.php bxmigrate:up将迁移应用于数据库

  5. 如果需要,可以使用命令php cli.php bxmigrate:down取消最后一个迁移

库提供的命令

  1. bxmigrate:create my_awesome_migration - 创建名为my_awesome_migration的迁移文件

  2. bxmigrate:up - 应用所有未应用的迁移

  3. bxmigrate:up 3 - 应用前3个未应用的迁移

  4. bxmigrate:up my_awesome_migration - 仅应用名为my_awesome_migration的迁移

  5. bxmigrate:down - 取消一个、最后一个按顺序应用的迁移

  6. bxmigrate:down 3 - 取消最后3个按顺序应用的迁移

  7. bxmigrate:down my_awesome_migration - 仅取消名为my_awesome_migration的迁移

  8. bxmigrate:refresh my_awesome_migration - 删除已安装的名为my_awesome_migration的迁移并重新安装

  9. bxmigrate:check my_awesome_migration - 标记名为my_awesome_migration的迁移为已应用,而不启动迁移本身

实现特点

  1. Bitrix的缓存在每个迁移前都会被清除。

  2. 默认情况下,所有在updown方法中的操作都被事务包裹。要执行不带事务的迁移,需要分别使用unsafeUpunsafeDown方法。

  3. 快速创建迁移。如果迁移的名称符合特定的正则表达式,则迁移文件将立即生成,并实现updown方法,这些方法将传递正则表达式从迁移名称中获取的值。快速名称列表

    • /^create_iblock_(.+)_uf_(.+)$/i (create_iblock_news_uf_author) - 为具有指定第二参数代码的代码为第一参数的资讯块分区创建用户属性。
    • /^update_iblock_(.+)_uf_(.+)$/i (update_iblock_news_uf_author) - 更新具有指定第二参数代码的代码为第一参数的资讯块分区的用户属性。
    • /^delete_iblock_(.+)_uf_(.+)$/i (delete_iblock_news_uf_author) - 删除具有指定第二参数代码的代码为第一参数的资讯块分区的用户属性。
    • /^create_iblock_(.+)_property_(.+)$/i (create_iblock_news_property_author) - 为指定第一参数的代码的资讯块元素创建具有指定第二参数代码的属性。
    • /^update_iblock_(.+)_property_(.+)$/i (update_iblock_news_property_author) - 更新指定第一参数的代码的资讯块元素的具有指定第二参数代码的属性。
    • /^delete_iblock_(.+)_property_(.+)$/i (delete_iblock_news_property_author) - 删除指定第一参数的代码的资讯块元素的具有指定第二参数代码的属性。
    • /^create_iblock_type_(.+)$/i (create_iblock_type_content) - 创建具有指定第一参数代码的资讯块类型。
    • /^delete_iblock_type_(.+)$/i (delete_iblock_type_content) - 删除具有指定第一参数代码的资讯块类型。
    • /^create_iblock_(.+)$/i (create_iblock_news) - 创建具有指定第一参数代码的资讯块。
    • /^update_iblock_(.+)$/i (update_iblock_news) - 更新具有指定第一参数代码的资讯块。
    • /^create_iblock_(.+)$/i (create_iblock_news) - 创建具有指定第一参数代码的资讯块。
    • /^install_module_(.+)$/i (install_module_iblock) - 安装具有指定第一参数代码的模块。
    • /^delete_module_(.+)$/i (delete_module_iblock) - 删除具有指定第一参数代码的模块。
    • /^create_user_uf_(.+)$/i (create_user_uf_field) - 为具有指定第一参数代码的用户实体创建用户字段(UF_*)。
    • /^update_user_uf_(.+)$/i (update_user_uf_field) - 更新具有指定第一参数代码的用户实体的用户字段(UF_*)。
    • /^delete_user_uf_(.+)$/i (delete_user_uf_field) - 删除具有指定第一参数代码的用户实体的用户字段(UF_*)。
    • /^create_hlblock_(.+)_property_(.+)$/i (create_hlblock_OrderForm_property_number) - 为具有指定第二参数代码的代码为第一参数的高负载资讯块实体创建用户属性。
    • /^update_hlblock_(.+)_property_(.+)$/i (update_hlblock_OrderForm_property_number) - 更新具有指定第二参数代码的代码为第一参数的高负载资讯块实体的用户属性。
    • /^delete_hlblock_(.+)_property_(.+)$/i (delete_hlblock_OrderForm_property_number) - 删除具有指定第二参数代码的代码为第一参数的高负载资讯块实体的用户属性。
    • /^create_hlblock_(.+)$/i (create_hlblock_OrderForm) - 创建名称为第一参数的高负载资讯块实体。
    • /^update_hlblock_(.+)$/i (update_hlblock_OrderForm) - 更新名称为第一参数的高负载资讯块实体。
    • /^delete_hlblock_(.+)$/i (delete_hlblock_OrderForm) - 删除名称为第一参数的高负载资讯块实体。
    • /^create_email_event_type_(.+)_lid_([^_]+)$/i (create_email_event_type_TEST_MESSAGE_ru) - 创建名称为第一参数,并绑定到第二参数语言的邮件事件类型。
    • /^update_email_event_type_(.+)_lid_([^_]+)$/i (update_email_event_type_TEST_MESSAGE_ru) - 更新名为第一个参数,并与第二个参数指定的语言绑定的邮箱事件类型。
    • /^delete_email_event_type_(.+)_lid_([^_]+)$/i (delete_email_event_type_TEST_MESSAGE_ru) - 删除名为第一个参数,并与第二个参数指定的语言绑定的邮箱事件类型。
    • /^create_email_template_(.+)$/i (create_email_template_TEST_MESSAGE) - 为类型为第一个参数的事件创建邮箱消息模板。
    • /^update_email_template_(.+)$/i (update_email_template_TEST_MESSAGE) - 更新类型为第一个参数的事件的邮箱消息模板。
    • /^delete_email_template_(.+)$/i (delete_email_template_TEST_MESSAGE) - 删除类型为第一个参数的事件的邮箱消息模板。