lfaveur/doctrine-migrations-multiple-database-bundle

Symfony DoctrineMigrationsMultipleDatabaseBundle

0.3.6 2022-07-07 15:27 UTC

This package is auto-updated.

Last update: 2024-09-07 19:59:04 UTC


README

此包以非常规和脏的方式扩展了 DoctrineMigrationsBundle 的功能,以提供配置多个实体管理器迁移路径的简单方法。

配置

  • 通过运行 composer require avaibooksports/doctrine-migrations-multiple-database-bundle 安装包
  • 转到你的 config/bundles.php 文件并注册此包
AvaiBookSports\Bundle\MigrationsMutlipleDatabase\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 选项的命令,你必须始终提供正确的实体管理器。否则,它将迭代每个实体管理器,最终失败。如果你想建议更好的工作流程,请 提交问题

支持配置

目前,除了 connectionem 之外的所有配置参数都应正常工作,因为我们已经指定了要连接的实体管理器。

这是将 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 版本将涵盖完整的配置文件和所有命令。