在Symfony上进行主义迁移以更新多个模式中的表

时间:2019-07-16 22:05:54

标签: postgresql symfony doctrine symfony4 doctrine-migrations

我们正在将我们的软件从我们自己的遗留PHP框架迁移到Symfony。 我们的应用程序对每个用户都有不同的架构。因此,除了公共模式外,我们还有大约2.000个用户模式。 假设我们有一个类似于市场的系统,并且每个用户都可以在自己的Schema中自定义一些表,但是我们不要专注于此。

我们目前正在寻找针对以下两个问题的最佳解决方案:

  1. 注册新用户后,我们的Symfony应该只为该新创建的用户架构运行迁移。
  2. 创建迁移时,我们需要该迁移影响所有现有的用户模式。

当前,在我们的旧系统中,我们使用一堆PHP逻辑来进行此类迁移,并且我想避免自定义DoctrineMigrationsBundle或在一次迁移中包含数百行PHP代码。

所以我想知道有没有更简单的方法来处理Doctrine / Symfony中的所有用户模式,所以当我运行例如:

php bin/console doctrine:migrations:migrate

我们所有现有的用户架构都已更新。


我们的用户模式名称类似于app234234app453453,除了那些模式之外,我们只有默认的public模式

我们正在使用:

  • Symfony 4.3
  • PostgreSQL 9.1
  • PHP 7.3

1 个答案:

答案 0 :(得分:1)

1-对于您拥有的每个架构,都可以定义一个架构过滤器。假设您为用户表添加模式名称 app234234 _ 。为了防止迁移删除其他表,可以在config.yml / doctrine.yml或定义新用户架构的任何地方使用doctrine dbal schema_filter 属性

## doctrine.yml

    doctrine:
        dbal:
            connections:
                 app234234:
                       schema_filter: "/^app234234_/" ## more likely a %schema_name% parameter

根据symfony doc :这将忽略DBAL级别的表,并且它们将被diff命令忽略。

请注意,如果您配置了多个连接,则需要按连接放置schema_filter配置

2-关于第二点,我不知道这是否可以用symfony处理。