meven / bitrix-migrations
Bitrix CMS 数据库迁移
Requires
- php: >=7.2.0
- symfony/console: ~2|~3|~4
- tightenco/collect: 5.*
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
README
Bitrix-migrations
仅针对Bitrix CMS的数据库迁移,但也适用于其他
安装
-
composer require meven58/bitrix-migrations
-
cp vendor/meven58/bitrix-migrations/migrator migrator
- 将可执行文件复制到方便的位置。 -
进入文件夹并确保设置了正确的 $_SERVER['DOCUMENT_ROOT']。如有必要,请更改设置
-
php migrator install
该命令将在数据库中创建一个表来存储已执行的迁移名称。
默认情况下
-
表名为 migrations。
-
composer.json
和migrator
位于网站根目录。 -
迁移文件将创建在
./migrations
目录中,相对于步骤 2 中复制的文件。
如有需要,可以在复制的 migrator
文件中更改这些设置。
- 强烈建议通过Web服务器使
migrator
和./migrations
不可通过 http 访问。 *
使用方法
工作流程
工作流程通过控制台进行,简要描述如下
- 使用
php migrator make 名称_迁移
创建迁移文件(或多个文件)
迁移文件是一个包含两个方法 up()
和 down()
的类
-
在
up()
方法中实现数据库所需更改。如有需要,在down()
方法中实现撤销这些更改 -
应用现有迁移 -
php migrator migrate
-
将迁移文件纳入版本控制系统,以便在其他机器上运行
可用命令
可以在控制台中获取可用命令列表 - php migrator list
迁移模板
由于通过Bitrix API修改Bitrix数据库结构非常不愉快,因此存在迁移模板机制,其工作方式如下:在生成迁移文件时,可以指定模板:php migrator make 名称_迁移 -t add_iblock
其中 add_block
是模板名称。此时将生成一个基于模板的类,并需要指定细节(例如名称和代码块),可以在 migrator
文件中直接添加自己的迁移模板,使用 TemplateCollection::registerTemplate()
现有模板
php migrator status
- 显示可执行迁移和最后执行的迁移。
自动创建迁移
另一个杀手级功能 - 自动创建迁移模式。要启用此模式,需要在 init.php
中添加以下内容
Arrilot\BitrixMigrations\Autocreate\Manager::init($_SERVER["DOCUMENT_ROOT"].'/migrations');
将类似配置文件目录的路径传递给 Manager::init()
方法。
之后,在管理员界面执行一系列操作时,将发生以下情况
-
触发Bitrix事件处理器
-
创建迁移文件,就像使用
php migrator make
一样 -
将迁移标记为已应用
-
显示有关前述步骤的通知
启用此模式可以消除许多情况下手动编写迁移的需求。自动创建的迁移无需修改。
处理事件列表
- 迁移使用
OnBefore...
事件。如果您的更改发生错误(例如添加信息块时未指定站点绑定),则将显示有关创建迁移的通知,在这种情况下,需要手动使用php migrator rollback --hard --delete
撤销此类迁移。 *
迁移错误处理
只需抛出异常即可在执行过程中取消迁移 - php throw new MigrationException('这里为错误文本');
此时,迁移以及后续迁移都不会被应用。
在Bitrix之外使用
本包旨在与Bitrix一起使用,但也可以相当容易地用于其他系统。为此,需要在migrator
文件中进行以下操作:
-
将Bitrix核心连接替换为其他系统的核心。
-
实现自己的
Arrilot\BitrixMigrations\Repositories\BitrixDatabaseRepository;
副本并使用它。 -
根据需要,可以禁用现有的迁移模板,创建自己的模板。