如何从 Symfony 中的 Doctrine 迁移中排除预先存在的表?

问题描述 投票:0回答:2

我正在使用 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 ...

  1. 如何配置 Doctrine 或 Symfony 以从迁移生成过程中排除非前缀表(那些没有 pp_ 的表)?
  2. 有没有办法自定义 make:migration 命令来忽略这些表,或者可能是在 Symfony/Doctrine 中处理这种情况的推荐方法? 任何见解或建议将不胜感激!
symfony doctrine-orm doctrine-migrations
2个回答
3
投票

要将 Doctrine 配置为仅针对具有特定前缀(在您的情况下为 pp_)的表生成迁移,您可以在 Doctrine 配置中使用表过滤选项。这是通过在doctrine.yaml 文件中指定架构过滤器来实现的。具体方法如下:

doctrine:
  dbal:
    #  ...
    schema_filter: ~^(pp_)~

这个正则表达式告诉 Doctrine 仅考虑以“pp_”开头的表。通过添加此过滤器,Doctrine 在生成迁移时将忽略没有此前缀的表。有关更多详细信息,请参阅 Symfony 网站上的 DoctrineBundle 文档:DoctrineBundle 文档


0
投票

@alexdoobre 的回答是正确的,但为了能够执行迁移,我们需要在正则表达式中包含“doctrine_migration_versions”表,这对于跟踪迁移至关重要。

doctrine:
    dbal:
        # ...
        schema_filter: ~^(pp_|doctrine_migration_versions)$~
© www.soinside.com 2019 - 2024. All rights reserved.