enjame / bitrix-migrations
Bitrix CMS 的数据库迁移
Requires
- php: >=5.5.0
- symfony/console: ~2|~3|~4
- tightenco/collect: 5.*
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
README
Bitrix-migrations
Bitrix 和其他数据库的迁移
安装
-
composer require enjame/bitrix-migrations -
cp vendor/enjame/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 改变数据库结构是一项非常不愉快的工作,因此存在迁移模板机制,其工作方式如下:在生成迁移文件时,可以指定模板: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() 方法中传递与 migrator 文件中配置相似的目录路径。
之后,在管理员控制台执行一系列操作时将发生以下情况
-
触发 Bitrix 事件处理器
-
创建迁移文件,类似于
php migrator make -
标记迁移为已应用
-
显示有关前面步骤的通知
启用此模式可以消除许多情况下手动编写迁移的需求。在自动创建的迁移中不需要进行任何更改。
处理事件列表
- 迁移使用
OnBefore...事件。如果您的更改(例如,在添加信息块时未指定网站绑定)发生错误,并且显示有关创建迁移的通知,则必须手动使用php migrator rollback --hard --delete回滚此类迁移。 *
迁移错误处理
在执行迁移过程中,要取消迁移,只需抛出一个异常 - php throw new MigrationException('这里错误文本'); 这样既不会应用当前的迁移,也不会应用后续的迁移。
在Bitriks之外的使用
该包是为与Bitriks一起使用而创建的,但也很容易在其他系统中使用。为了做到这一点,需要在 migrator 文件中
-
将Bitriks的核心连接替换为其他系统的核心。
-
实现自己的类似
Arrilot\BitrixMigrations\Repositories\BitrixDatabaseRepository;并使用它。 -
如有需要,可以禁用现有的迁移模板,创建自己的模板。