在验证和更新模式时,我正在努力让 symfony/doctrine 排除数据库视图。
我第一次尝试没有教义迁移(参见这个问题),但没有奏效。
我发现学说迁移会从验证/更新中过滤掉视图,并且确实如此,因此该步骤似乎适用于迁移。
因此,如果一个人只有一个数据库,则学说迁移可以正常工作,但至少可以说,具有多个数据库的设置并不是干净利落的。
这是一个已知问题,您可以在此链接上看到。不幸的是,当尝试遵循链接中描述的解决方案时,结果很混乱。
即使命令 migrations:update --em=default 将指示设置了正确的数据库,但在生成 migrations:diff --em=default 时,它将与其他数据库混合,同样与 migrations:migrate --em=default 结束在另一个数据库上创建表。
更具体地说,错误是: - 它将为配置文件中指示的迁移文件创建单独的目录,但不会创建相应的 em - 它会生成混合两个 em 的 mysql 查询 - 因此它将更新 db
我的设置如下:
配置.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: ~
然后,迁移的具体配置文件是:
学说迁移默认.yml
doctrine_migrations:
dir_name: "%kernel.root_dir%/DoctrineMigrationsDefault"
namespace: App\DoctrineMigrationsDefault
table_name: migration_versions
name: Application_Migrations_Default
学说迁移使用的.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
另外,如果我尝试使用以下内容专门指示配置文件:
php bin/console 学说:迁移:状态 --em=default --configuration=./app/config/doctrine_migrations_default.yml
它不会识别文件信息,即使它直接从 config.yml 获取信息时也会识别。抛出以下错误。
[Doctrine\DBAL\Migrations\MigrationException]
迁移配置键“doctrine_migrations”不存在。
如果我取出教义迁移键,它将在遇到的下一个信息中生成错误。