我正在使用 Doctrine 开发 Symfony 项目,并且在迁移生成过程中遇到了问题。我的数据库有预先存在的表,我只想使用 Doctrine 管理这些表的子集(以 pp_ 为前缀的表)。但是,当我运行 php bin/console make:migration 时,迁移文件包含所有表的 SQL 语句,而不仅仅是那些带有 pp_ 前缀的表。
这是我迄今为止尝试过的:
确保我的实体文件夹仅包含 pp_ 前缀表的实体(当前为空)。 清除 Doctrine 缓存(php bin/console Doctrine:cache:clear-metadata)。 检查 Doctrine 配置以禁用 auto_mapping 并确保它不会导致现有表的自动映射。 尽管做出了这些努力,make:migration 仍然会为所有表生成迁移,包括那些没有 pp_ 前缀的表。这是我当前的doctrine.yaml配置供参考:
doctrine.yaml:
doctrine:
orm:
default_entity_manager: default
entity_managers:
default:
auto_mapping: false
# ... other configurations ...
要将 Doctrine 配置为仅针对具有特定前缀(在您的情况下为 pp_)的表生成迁移,您可以在 Doctrine 配置中使用表过滤选项。这是通过在doctrine.yaml 文件中指定架构过滤器来实现的。具体方法如下:
doctrine:
dbal:
# ...
schema_filter: ~^(pp_)~
这个正则表达式告诉 Doctrine 仅考虑以“pp_”开头的表。通过添加此过滤器,Doctrine 在生成迁移时将忽略没有此前缀的表。有关更多详细信息,请参阅 Symfony 网站上的 DoctrineBundle 文档:DoctrineBundle 文档。
@alexdoobre 的回答是正确的,但为了能够执行迁移,我们需要在正则表达式中包含“doctrine_migration_versions”表,这对于跟踪迁移至关重要。
doctrine:
dbal:
# ...
schema_filter: ~^(pp_|doctrine_migration_versions)$~