我在使用symfony/doctrine时遇到了问题,无法在验证和更新schema时排除db视图。
刚开始我尝试不用doctrine migrations(参见此问题),但没成功。
后来我发现doctrine migrations会从验证/更新中过滤掉视图,并且实际上确实过滤掉了,因此使用migrations似乎可以解决这个问题。
所以,如果只有一个db,doctrine migrations就能正常工作,但是对于多个db的设置来说,情况则相当复杂。
正如您在此链接中所看到的那样,这是一个已知的问题。不幸的是,尝试按照链接中描述的解决方案操作结果比较混乱。
即使命令migrations:update --em=default指示正确的数据库设置已经完成,但生成migrations:diff --em=default时它将与其他db混合在一起,migrations:migrate --em=default同理,这最终会在其他db上创建表。
具体错误如下: - 它会根据配置文件创建单独的迁移文件目录,但不会对应到相应的em - 它会混合生成两个em的mysql查询 - 因此它会更新db
我的设置如下:
config.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: App\DoctrineMigrationsDefault
table_name: migration_versions
name: Application_Migrations_Default
doctrine_migrations_used.yml
doctrine_migrations:
dir_name: "%kernel.root_dir%/DoctrineMigrationsUsed"
namespace: Used\DoctrineMigrationsUsed
table_name: migration_versions
name: Application Migrations Used
organize_migrations: false
以下是一个混淆配置的例子。数据库名称是正确的,对应于em=default。但其他信息来自em=used。
谢谢
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: Used\DoctrineMigrationsUsed
>> 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
此外,如果我尝试使用以下命令指定配置文件:
即使它直接从config.yml获取信息,在这种情况下,它也无法识别文件信息。将抛出以下错误:php bin/console doctrine:migrations:status --em=default --configuration=./app/config/doctrine_migrations_default.yml
如果我删除doctrine_migrations密钥,它会在遇到下一个信息时生成错误。[Doctrine\DBAL\Migrations\MigrationException]
迁移配置密钥“doctrine_migrations”不存在。