maximaster/bitrix-migrations

使用 Doctrine Migrations 为 Bitrix 实现迁移。

v1.0.2 2024-08-28 09:31 UTC

This package is auto-updated.

Last update: 2024-08-28 09:33:03 UTC


README

通过 doctrine/migrations 简化在 Bitrix 项目中连接迁移,并包含适用于 Bitrix 的迁移基础类和一些有用方法。

此外,迁移操作与基本使用 doctrine/migrations 相同。

安装和初始配置

composer require maximaster/bitrix-migrations

接下来,安装标准配置 doctrine/migrations

./vendor/bin/bitrix-migrations init

使用

当使用特定于 Bitrix 的方法时,该库的主要用途得以体现。例如,addCreateIblockTableSql 方法就是一个很好的例子。

$this->addCreateIblockTableSql('b_iblock_element_prop_s?', sprintf('XML_ID = "%s"', self::ID), '(
    IBLOCK_ELEMENT_ID INT(11) not null REFERENCES b_iblock_element(ID),
    PRIMARY KEY (IBLOCK_ELEMENT_ID)
)');

这里的表名将取决于具有相应 XML_ID 的信息块 ID。

内部使用了 预定义语句,编写起来相当复杂。

建议您立即学习 BitrixMigration 类的受保护方法,以有效地使用该库。

特别值得一提的是 addGeneratedSql 方法,它允许生成使用“占位符”数据的位置查询。要了解此方法的工作原理,请查看其在其他 BitrixMigration 方法中的使用情况。实现灵感来自 论文,在更新此 README 时的状态,以及 尚未发布

向后兼容性

迁移应尽可能少地依赖外部代码,否则,如果外部代码发生变化,先前按一个逻辑运行的迁移在更改后可能会开始按不同的逻辑运行,或者根本无法运行。

因此,该库严格遵循 语义化版本控制。如果您已锁定主版本,则在更新依赖项后,迁移中不应出现任何“惊喜”。

附加功能

如果您使用 symfony/console,则可以将该包的附加命令连接到您的控制台应用程序(目前只有一个)。

  • bitrix-migrations:generate-table - 根据 DataManager 类创建数据库表。
$bitrixLoader = \Maximaster\BitrixLoader\BitrixLoader::fromComposerConfigExtra(__DIR__ . '/../composer.json');
$bitrixMigrationsCommandsFactory = require __DIR__ . '/../vendor/maximaster/bitrix-migrations/config/commands.php';
$app->addCommands($bitrixMigrationsCommandsFactory($bitrixLoader));

替代方案

有其他几个项目解决了在项目中添加迁移的问题,包括具有相同名称的项目。如果您决定选择其中一个,请注意:

  • 如果该项目不使用类似 doctrine/migrations 的流行迁移库作为基础,则迁移操作将受限,并且质量较低,因为这些解决方案通常未经过测试和静态分析;
  • 如果该项目提倡在迁移中使用 Bitrix API,那么请做好心理准备,在某个不愉快的时刻,之前运行良好的迁移(例如创建信息块)可能会因添加了新的处理器而失败,例如,您在项目中添加了一个创建信息块的处理器,它现在将在安装时启动并修改迁移的结果。即使可以解决这个问题,您也不太可能希望不断解决旧的迁移问题。而且,并非所有问题都可以解决,因为它们可能来自 Bitrix 的核心(例如,在更新核心后);
  • 如果该项目声称您可以在管理员操作中自动生成迁移,请注意生成的迁移。如果它们包含固定的 ID,那么请考虑在产品环境中这些迁移会发生什么,因为当您在数据库复制和更新之间有足够的时间,并且管理员创建了一个新的对象以占用该 ID 时,该 ID 可能已被占用。