Ber*_*rdA 5 php symfony doctrine-orm doctrine-migrations
我在验证和更新模式时努力让 symfony/doctrine 排除数据库视图。
我首先尝试不进行教条迁移(请参阅此问题),但这没有用。
我发现学说迁移会过滤掉验证/更新中的视图,而且确实如此,因此该步骤似乎适用于迁移。
因此,如果只有一个数据库原则,迁移会很好地工作,但至少可以说,使用多个数据库的设置并不是很干净。
这是一个已知问题,您可以在此链接中看到。不幸的是,当尝试遵循链接中描述的解决方案时,结果很混乱。
即使命令 migrations:update --em=default 将指示设置了正确的数据库,但在生成 migrations:diff --em=default 时,它将与其他数据库混合,同样与 migrates: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: ~
Run Code Online (Sandbox Code Playgroud)
那么,迁移的具体配置文件为:
学说_migrations_default.yml
doctrine_migrations:
dir_name: "%kernel.root_dir%/DoctrineMigrationsDefault"
namespace: App\DoctrineMigrationsDefault
table_name: migration_versions
name: Application_Migrations_Default
Run Code Online (Sandbox Code Playgroud)
学说_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
Run Code Online (Sandbox Code Playgroud)
这是它如何混合配置的一个示例。数据库名称正确。它对应于 em=default。但其他信息来自 em=used
谢谢
php bin/console doctrine:migrations:status --em=default
Run Code Online (Sandbox Code Playgroud)
== 配置
>> 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
Run Code Online (Sandbox Code Playgroud)
另外,如果我尝试使用以下命令专门指示配置文件:
php bin/console 学说:迁移:状态 --em=default --configuration=./app/config/doctrine_migrations_default.yml
它不会识别文件信息,即使它直接从 config.yml 获取信息时也是如此。抛出以下错误。
[Doctrine\DBAL\Migrations\MigrationException]
迁移配置键“doctrine_migrations”不存在。
如果我取出doctrine_migrations密钥,它将在遇到的下一个信息中生成错误。
不要在 config.yml 文件中导入迁移设置。
您的个人配置文件实际上并未正确配置,这就是您收到有关配置密钥不存在的错误的原因。这些键与正常迁移配置中的键不同。我必须搜索代码才能找到正确的设置。(我在AbstractFileConfiguration.php 文件的 ln35 附近找到了它们)
试试这些——
学说_migrations_default.yml
migrations_directory: "app/DoctrineMigrationsDefault"
migrations_namespace: App\DoctrineMigrationsDefault
table_name: migration_versions
name: Application_Migrations_Default
Run Code Online (Sandbox Code Playgroud)
学说_migrations_used.yml
migrations_directory: "app/DoctrineMigrationsUsed"
migrations_namespace: Used\DoctrineMigrationsUsed
table_name: migration_versions
name: Application Migrations Used
organize_migrations: false #valid entries are false, 'year', and 'year_and_month'
Run Code Online (Sandbox Code Playgroud)
doctrine_migrations、dir_name 和 namespace 不是该配置文件的有效条目。
另外,您不能在目录路径中使用 %kernel.root_dir% 但对我有用的是将其更改为“app”或提供完整路径。
| 归档时间: |
|
| 查看次数: |
4820 次 |
| 最近记录: |