arrilot / 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。如果您对这个项目感兴趣并希望维护它 - 分支它并在本仓库创建一个Issue,以便我们在此处放置分支的链接。
分支
Bitrix-migrations
Bitrix和其他数据库的迁移
安装
-
composer require arrilot/bitrix-migrations
-
cp vendor/arrilot/bitrix-migrations/migrator migrator
- 将可执行文件复制到方便的位置。 -
进入并确保设置了正确的一 $_SERVER['DOCUMENT_ROOT']。如果需要,请更改设置
-
php migrator install
此命令将在数据库中创建一个用于存储已执行迁移名称的表。
默认情况下
-
表名为migrations。
-
composer.json
和migrator
位于网站根目录。 -
迁移文件将在
./migrations
目录中创建,该目录相对于第2步复制的文件。
如果需要,所有这些都可以在复制的migrator
文件中更改。
- 强烈建议通过Web服务器通过http使
migrator
和./migrations
不可访问。*
使用
工作流程
工作流程通过控制台进行,简要描述如下
- 使用
php migrator make 名称_迁移
创建迁移文件(或文件)
迁移文件是一个具有两个方法up()
和down()
的类
-
在
up()
方法中实现对数据库的必要更改。如果需要,在down()
方法中实现这些更改的回滚 -
应用现有迁移 -
php migrator migrate
-
将迁移文件添加到版本控制系统,以便在其他机器上运行
可用命令
可以在控制台中获取可用命令列表 - 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` | 将所有迁移移动到存档。默认情况下是存档目录,但可以在配置中通过“dir_archive”进行重定义。 选项 `-w 10` - 不将最后N个迁移移动到存档 |
迁移模板
由于通过Bitrix的API更改数据库结构是一件非常不愉快的事情,因此存在一个迁移模板机制,其工作方式如下:在生成迁移文件时,可以指定其模板:`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` | 通过d7 API在数据库中执行任意查询 | |
`add_table` | 通过d7 API创建表 | `create_table` |
`delete_table` | 通过d7 API删除表 | `drop_table` |
php migrator status
- 显示可用的迁移以及最近执行的迁移。
自动创建迁移
另一个杀手级功能是自动创建迁移模式。要启用此模式,需要将以下内容添加到 init.php
Arrilot\BitrixMigrations\Autocreate\Manager::init($_SERVER["DOCUMENT_ROOT"].'/migrations');
将类似配置的路径传递给 Manager::init()
方法。
之后,在执行一系列管理操作时将发生以下情况
-
触发Bitrix的事件处理器
-
创建迁移文件,类似于
php migrator make
-
迁移被标记为已应用
-
显示有关先前步骤的通知
启用此模式可以消除许多情况下手动编写迁移的需求。在自动创建的迁移中不需要进行任何修改。
处理的事件列表
事件 | 评论 |
---|---|
添加信息块 | |
更新信息块的基本字段 | 由于Bitrix管理员的特定工作方式,此迁移通常在不需要时创建,例如在添加自定义属性到信息块时。没有致命的,但必须接受。 |
删除信息块 | |
在信息块中添加自定义属性 | |
更新信息块的自定义属性 | 只有当属性的一个或多个属性被更改时,才会创建迁移 |
删除信息块的自定义属性 | |
将UF属性添加到任何地方(信息块部分,用户,加载块) | 遗憾的是,Bitrix不允许跟踪此类属性的变化 - 只允许添加和删除 |
删除UF属性 | |
添加加载块 | |
修改加载块 | 只有当加载块的一个或多个属性被更改时,才会创建迁移 |
删除加载块 | |
添加用户组 | |
修改用户组 | |
删除用户组 |
- 迁移使用
OnBefore...
事件。如果您的更改发生错误(例如,在添加信息块时未指定站点绑定),并且显示有关创建迁移的通知,则必须手动使用php migrator rollback --hard --delete
* 来回滚此类迁移。
迁移错误处理
在执行迁移的过程中,只需抛出异常即可取消迁移 - php throw new MigrationException('此处错误文本');
此时,迁移本身以及后续迁移都不会被执行。
在其他系统中的使用
该包是为了与Bitrix一起使用而创建的,但它也可以非常容易地在其他系统中使用。为此,需要在文件migrator
-
将Bitrix内核的连接替换为其他系统的内核。
-
实现自己的类似
Arrilot\BitrixMigrations\Repositories\BitrixDatabaseRepository;
的版本并使用它。 -
如有需要,可以禁用现有的迁移模板,创建自己的模板。