arrilot/bitrix-migrations

该包已被废弃,不再维护。未建议替代包。

Bitrix CMS 的数据库迁移

2.6.2 2019-11-16 12:15 UTC

This package is auto-updated.

Last update: 2023-01-20 13:39:19 UTC


README

Latest Stable Version Total Downloads Build Status Scrutinizer Quality Score

此包已不再活跃维护

原因是我们不再使用 Bitrix 项目。如果您对这个项目感兴趣并想进行维护 - 分支它,并在本仓库创建 Issue 以便我们在此处添加分支链接。

分支

Bitrix-migrations

为 Bitrix 和其他系统提供数据库迁移

安装

  1. composer require arrilot/bitrix-migrations

  2. cp vendor/arrilot/bitrix-migrations/migrator migrator - 将可执行文件复制到方便的位置。

  3. 进入并确保设置了正确 $_SERVER['DOCUMENT_ROOT']。如有必要,更改设置

  4. php migrator install

该命令将在数据库中创建一个用于存储已执行迁移名称的表。

默认情况下

  1. 表名为 migrations。

  2. composer.jsonmigrator 位于网站的根目录。

  3. 迁移文件将在 ./migrations 目录中创建,该目录相对于步骤 2 复制的文件。

如有必要,可以在复制的 migrator 文件中更改这些设置。

  • 强烈建议通过 web 服务器使 migrator./migrations 不可通过 http 访问。*

使用

工作流程

工作流程通过控制台进行,简要描述如下

  1. 使用 php migrator make 名称_迁移 创建迁移文件(或多个文件)

迁移文件是一个具有两个方法 up()down() 的类

  1. up() 方法中实现数据库中的必要更改。如有必要,在 down() 方法中实现撤销这些更改

  2. 应用现有迁移 - php migrator migrate

  3. 将迁移文件添加到版本控制系统,以便在其他机器上运行

可用命令

可以在控制台中获取可用命令列表 - php migrator list

名称描述
`php migrator install` 创建存储迁移的表。只需运行一次。
`php migrator make 名称_迁移` 创建迁移文件
`-d foo/bar` - 指定创建迁移的子目录
`php migrator migrate` 应用所有可应用的迁移。已应用的迁移不会再次应用。
`php migrator rollback` 回滚最后一个迁移(`down()` 方法)。之后可以再次应用。
选项
`--hard` - 执行硬回滚,不调用 `down()` 方法
`--delete` - 回滚后删除迁移文件。
`php migrator templates` 显示所有现有迁移模板的详细表格
`php migrator status` 显示可执行迁移以及最后执行迁移
`php migrator archive` 将所有迁移移至存档。默认情况下是archive目录,但可以在配置中通过指定"dir_archive"来重定义。
选项
`-w 10` - 不将最后N个迁移移至存档

迁移模板

由于通过Bitrix API修改Bitrix的结构非常不愉快,因此存在迁移模板机制,其工作方式如下:在生成迁移文件时,可以指定其模板:php migrator make 名称_迁移 -t add_iblock 其中 add_block 是模板名称。此时将生成一个由模板生成的类和布局,然后只需指定细节(例如名称和代码信息块)即可。可以直接在 migrator 文件中使用 TemplateCollection::registerTemplate() 添加自己的迁移模板。

现有模板

名称描述别名
`default` 默认的纯模板
`add_iblock_type` 添加信息块类型
`add_iblock` 添加信息块
`add_iblock_element_property` 在信息块中添加属性 `add_iblock_prop`, `add_iblock_element_prop`, `add_element_prop`, `add_element_property`
`add_uf` 添加UF属性
`query` 通过APId7在数据库中执行任意查询
`add_table` 通过APId7创建表 `create_table`
`delete_table` 通过APId7删除表 `drop_table`
  1. php migrator status - 显示可执行迁移以及最后执行的迁移。

自动创建迁移

另一个杀手级功能是自动创建迁移模式。要启用此模式,需要将以下内容添加到 init.php 中。

Arrilot\BitrixMigrations\Autocreate\Manager::init($_SERVER["DOCUMENT_ROOT"].'/migrations');

将配置文件中与 migrator 文件相同的目录路径传递给 Manager::init() 方法。

之后,在执行一系列操作时,将发生以下情况:

  1. 触发Bitrix事件处理器

  2. 创建迁移文件,类似于 php migrator make

  3. 迁移标记为已应用

  4. 显示有关上述步骤的通知

启用此模式可以消除许多情况下手动编写迁移的需求。在自动创建的迁移中不需要进行任何修改。

处理事件列表

事件注释
添加信息块
更新信息块的基本字段 由于Bitrix后台的特殊性,这种迁移通常在不需要时创建,例如在信息块中添加自定义属性时。没有致命错误,但必须接受。
删除信息块
在信息块中添加自定义属性
更新信息块的自定义属性 只有当属性的某些属性被更改时,才会创建迁移
删除信息块的自定义属性
在信息块、用户或高亮块中添加UF属性 遗憾的是,Bitrix不提供跟踪此类属性更改的选项 - 只提供添加和删除
删除UF属性
添加高亮块
更改高亮块 只有当高亮块的某些属性被更改时,才会创建迁移
删除高亮块
添加用户组
更改用户组
删除用户组
  • 迁移使用事件 OnBefore...。如果在您的更改过程中发生错误(例如在添加信息块时未指定网站绑定),并且显示有关已创建迁移的通知,则必须手动使用 php migrator rollback --hard --delete * 来回滚此类迁移。

迁移错误处理

要取消迁移,只需抛出异常 - php throw new MigrationException('这里错误文本'); 在这种情况下,迁移和随后的迁移都不会被应用。

在Bitrix外使用

此包旨在与Bitrix协同使用,但也很容易在其他系统中使用。为此,需要在migrator文件中进行替换。

  1. 将Bitrix核心连接替换为其他系统的核心。

  2. 实现自己的Arrilot\BitrixMigrations\Repositories\BitrixDatabaseRepository;的类似版本,并使用它。

  3. 根据需要,可以禁用现有的迁移模板,并创建自己的。