k3progetti / multiple-database
Symfony DoctrineMigrationsMultipleDatabaseBundle
v1.2.0
2024-03-04 14:57 UTC
Requires
- php: >=7.2
- doctrine/doctrine-bundle: ~1.0|~2.0
- doctrine/doctrine-migrations-bundle: ^3
- doctrine/migrations: ~3.0
- symfony/framework-bundle: ~3.4|~4.0|~5.0|~6.0|~7.0
Requires (Dev)
- doctrine/orm: ^2.6
- friendsofphp/php-cs-fixer: ^2.16
- phpstan/phpstan: ^0.12.48
- phpstan/phpstan-strict-rules: ^0.12.5
- phpstan/phpstan-symfony: ^0.12.8
README
此包以黑客和肮脏的方式扩展了 DoctrineMigrationsBundle 的功能,以提供为多个实体管理器配置迁移路径的简单方法。
配置
- 通过运行
composer require avaibooksports/doctrine-migrations-multiple-database-bundle
安装包 - 转到您的
config/bundles.php
文件并注册包
AvaiBookSports\Bundle\MigrationsMultipleDatabase\DoctrineMigrationsMultipleDatabaseBundle::class => ['all' => true],
- 最后,在
config/packages/
中创建一个名为doctrine_migrations_multiple_database.yaml
的文件,并按照以下示例进行操作
doctrine_migrations_multiple_database: entity_managers: default: migrations_paths: DoctrineMigrations\Main: '%kernel.project_dir%/migrations/Main' geonames: migrations_paths: DoctrineMigrations\Geonames: '%kernel.project_dir%/migrations/Geonames'
- 您可以将您的
doctirne_migrations.yaml
文件保持不变。未映射的命令将回退到该配置,如果您需要禁用此包,则一切都将按预期工作。
使用方法
只需调用始终相同的命令,使用相同的参数。请参阅 支持的命令
如果您为特定的实体管理器运行命令,请添加选项 --em=example
如果您调用任何支持的命令,它们将按预期工作,迭代所有定义的配置。
对于具有 --namespace
选项的命令,您必须始终提供正确的实体管理器。否则,它将迭代每个实体管理器,最终会失败。如果您想提出更好的工作流程,请打开一个问题!
支持的配置
目前,所有配置参数都应该工作,除了 connection
和 em
,因为我们已经指定了我们想要连接的实体管理器。
这是 DoctrineMigrationsBundle 的 示例配置 转换到这个包
# config/packages/doctrine_migrations_multiple_database.yaml doctrine_migrations_multiple_database: entity_managers: default: # List of namespace/path pairs to search for migrations, at least one required migrations_paths: 'App\Migrations': 'src/App' 'AnotherApp\Migrations': '/path/to/other/migrations' 'SomeBundle\Migrations': '@SomeBundle/Migrations' # List of additional migration classes to be loaded, optional migrations: - 'App\Migrations\Version123' - 'App\Migrations\Version123' storage: # Default (SQL table) metadata storage configuration table_storage: table_name: 'doctrine_migration_versions' version_column_name: 'version' version_column_length: 1024 executed_at_column_name: 'executed_at' execution_time_column_name: 'execution_time' # Possible values: "BY_YEAR", "BY_YEAR_AND_MONTH", false organize_migrations: false # Path to your custom migrations template custom_template: ~ # Run all migrations in a transaction. all_or_nothing: false # Adds an extra check in the generated migrations to ensure that is executed on the same database type. check_database_platform: true services: # Custom migration sorting service id 'Doctrine\Migrations\Version\Comparator': ~ # Custom migration classes factory 'Doctrine\Migrations\Version\MigrationFactory': ~ factories: # Custom migration sorting service id via callables (MyCallableFactory must be a callable) 'Doctrine\Migrations\Version\Comparator': 'MyCallableFactory'
支持的命令
doctrine:migrations:current
doctrine:migrations:diff
doctrine:migrations:dump-schema
doctrine:migrations:execute
doctrine:migrations:generate
doctrine:migrations:latest
doctrine:migrations:list
doctrine:migrations:migrate
doctrine:migrations:rollup
doctrine:migrations:status
doctrine:migrations:sync-metadata-storage
doctrine:migrations:up-to-date
doctrine:migrations:version
陷阱
此包正在积极开发以满足我们工作流程中一个非常特定的场景,但我们想与更多面临这个特定需求的人分享这个解决方案。
因为我们基于 YAML 文件进行配置,所以目前没有测试 XML 和 PHP 格式。如果您在配置包时遇到任何问题,我们非常希望收到您的反馈。单元测试迟早会到来。
此外,我们仅部分支持配置参数,并且并非所有命令都已映射。
所有标记为 0.x
的版本都将受到这些陷阱的影响,而版本 1.0
将覆盖完整的配置文件和所有命令。