如何设置带有多个db的symfony 3条令迁移



在验证和更新模式时,我很难让symfony/doctrine排除数据库视图。

我第一次尝试无原则迁移(见这个问题),但没有成功。

我发现,条令迁移会从验证/更新中过滤掉视图,事实上确实如此,所以这一步骤似乎适用于迁移。

因此,如果只有一个数据库原则,迁移会很好,但至少可以说,使用多个数据库的设置并不是干净的。

这是一个已知的问题,您可以在这个链接上看到。不幸的是,当试图遵循链接中描述的解决方案时,结果是混乱的。

尽管命令migration:update--em=default将指示设置了正确的数据库,但在生成migration:diff--em=default时,它将与其他数据库混合,同样与migration:migrate--em=default-混合,最终在其他数据库上创建表。

更具体地说,错误是:-它将为迁移文件创建单独的目录,如配置文件中所示,但不会创建到相应的em-它将生成混合了两个em的mysql查询-因此,它将更新数据库

我的设置如下:

配置yml

imports:
....
- { resource: doctrine_migrations_default.yml }
- { resource: doctrine_migrations_used.yml }
doctrine:
dbal:
default_connection: default
connections:
default:      
.....
#schema_filter: "~^(?!view).*$~"
schema_filter: ~^(?!view_)~
used:
......
orm:
auto_generate_proxy_classes: '%kernel.debug%'
default_entity_manager: default
entity_managers:
default:
naming_strategy: doctrine.orm.naming_strategy.underscore
connection: default
auto_mapping: true
mappings:
AppBundle:  ~
used:
naming_strategy: doctrine.orm.naming_strategy.underscore
connection: used
mappings:
UsedBundle: ~ 

然后,迁移的具体配置文件是:

doctrine_migrations_default.yml

doctrine_migrations: 
dir_name: "%kernel.root_dir%/DoctrineMigrationsDefault"
namespace: AppDoctrineMigrationsDefault
table_name: migration_versions
name: Application_Migrations_Default 

doctrine_migrations_used.yml

doctrine_migrations:
dir_name: "%kernel.root_dir%/DoctrineMigrationsUsed"
namespace: UsedDoctrineMigrationsUsed
table_name: migration_versions
name: Application Migrations Used
organize_migrations: false

这是它如何混合配置的一个例子。数据库名称正确。它对应于em=默认值。但其他信息来自em=使用的

感谢

php bin/console doctrine:migrations:status --em=default

==配置

>> Name:                                               Application Migrations Used
>> Database Driver:                                    pdo_mysql
>> Database Name:                                      symfony_cars
>> Configuration Source:                               manually configured
>> Version Table Name:                                 migration_versions
>> Version Column Name:                                version
>> Migrations Namespace:                               UsedDoctrineMigrationsUsed
>> Migrations Directory:                               /Users/BAMAC/Sites/Symfony1/app/DoctrineMigrationsUsed
>> Previous Version:                                   Already at first version
>> Current Version:                                    0
>> Next Version:                                       2017-10-19 08:03:52 (20171019080352)
>> Latest Version:                                     2017-10-19 08:03:52 (20171019080352)
>> Executed Migrations:                                0
>> Executed Unavailable Migrations:                    0
>> Available Migrations:                               1
>> New Migrations:                                     1

此外,如果我试图用来具体指示配置文件

php-bin/console原则:迁移:状态--em=default--configuration=/app/config/doctrine_migrations_default.yml

它不会识别文件信息,即使当它直接从config.yml获取信息时会识别。会引发以下错误。

[DDoctrine\DBAL\Migrations\MigrationException]
迁移配置密钥"Doctrine_Migrations"不存在。

如果我取出docrine_migrations键,它将在遇到的下一个信息中生成错误。

不要在config.yml文件中导入迁移设置。

您的各个配置文件实际上没有正确配置,这就是为什么您收到关于配置密钥不存在的错误。密钥与正常迁移配置中的密钥不同。我必须搜索代码才能找到正确的设置。(我在AbstractFileConfiguration.php文件的ln35附近找到了它们)

试试这些-

doctrine_migrations_default.yml

migrations_directory: "app/DoctrineMigrationsDefault"
migrations_namespace: AppDoctrineMigrationsDefault
table_name: migration_versions
name: Application_Migrations_Default 

doctrine_migrations_used.yml

migrations_directory: "app/DoctrineMigrationsUsed"
migrations_namespace: UsedDoctrineMigrationsUsed
table_name: migration_versions
name: Application Migrations Used
organize_migrations: false #valid entries are false, 'year', and 'year_and_month'

doctrine_migrations、dir_name和namespace不是该配置文件的有效项。

此外,您不能在目录路径中使用%kernel.root_dir%,但对我来说,有效的方法是将其更改为"app"或提供完整路径。

留给未来参考:

doctrine_migrations_default.yaml和doctrine_migrations_used.yaml文件用于跨多个实体管理器执行迁移时使用的额外配置。

这些文件不应由symfony自动加载,您可以将它们直接放在config/下,而不是放在docrine_migrations.yaml所在的config/packages中。

我在symfony 5.0.4上测试了它,它运行得很好:

php bin/console doctrine:migrations:migrate --em=used --configuration=config/doctrine_migrations_used.yaml

相关内容

  • 没有找到相关文章

最新更新