blixem / third-party-migrations
关于此软件包最新版本(1.x-dev)没有可用的许可证信息。
1.x-dev
2024-02-22 10:47 UTC
Requires
- doctrine/migrations: ^3.0
This package is auto-updated.
Last update: 2024-09-29 14:27:06 UTC
README
ThirdPartyMigrations 允许第三方 Composer 软件包轻松注册它们自己的迁移。
使用普通 Doctrine 迁移对第三方软件包来说有点麻烦。此软件包通过允许您定义迁移属于哪个软件包,并为每个迁移指定一个模式版本号来简化这一过程。ThirdPartyMigrations 确保只执行正确的迁移。每个软件包的当前模式版本存储在 package_schema_version
表中。执行迁移上或下操作会自动修改此表。
您可以定义两种类型的迁移:安装迁移,包含软件包最新版本的完整模式;更新迁移,仅包含自上一版本以来模式的变化。
为了正确执行迁移的顺序,建议为安装迁移命名为类似 Version0000_Install 的名称,并为更新迁移的名称增加数字,例如 Version0001_。
安装
$ composer require blixem/third-party-migrations
Symfony
ThirdPartyMigrations 为方便集成到 Symfony 框架提供了 Symfony 扩展包。当使用 Symfony Flex 时,ThirdPartyMigrationsBundle 会自动添加到您的扩展包配置中。否则,将以下行添加到您的 bundles.php
Blixem\ThirdPartyMigrations\ThirdPartyMigrationsBundle::class => ['all' => true],
使用
<?php namespace MyVendor\MyPackage; use Blixem\ThirdPartyMigrations\MigrationsProviderInterface; /** * Service definitions of MigrationsProviderInterface are automatically * picked up by the Symfony bundle */ class MyMigrationsProvider implements MigrationsProviderInterface { public static function getMigrationsPath(): string { return __DIR__ .'/../migrations'; } public static function getMigrationsNamespace(): string { return 'MyVendor\\MyPackage\\Migrations'; } }
<?php namespace MyVendor\MyPackage\Migrations; /** * The installation migration sets up the database from scratch. * It contains the most up-to-date version of the database schema. */ class Version0000_Install { public function getPackageName(): string { return 'name/package'; } public function getTargetVersion(): string { return '1.1.0'; /* the latest version */ } public function getPreviousVersion(): ?string { return null; } public function up(): void { $this->addSql('CREATE TABLE ...'); } public function down(): void { $this->addSql('DELETE TABLE ...'); } }
<?php namespace MyVendor\MyPackage\Migrations; /** * This migration updates the schema from version 1.0.0 to 1.1.0 */ class Version0001_1_1_0 { public function getPackageName(): string { return 'name/package'; } public function getTargetVersion(): ?string { return '1.1.0'; } public function getPreviousVersion(): ?string { return '1.0.0'; } public function up(): void { $this->addSql('ALTER TABLE ... ADD ...'); } public function down(): void { $this->addSql('ALTER TABLE ... DROP COLUMN ...'); } }