0

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

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

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

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

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

php bin/console doctrine:migrations:migrate

我们所有现有的用户模式都已更新。


我们的用户 Schema 名称是 like app234234app453453除了那些 Schemas 我们只有默认publicSchema

我们正在使用:

  • Symfony 4.3
  • PostgreSQL 9.1
  • PHP 7.3
4

1 回答 1

1

1 - 对于您拥有的每个架构,您可以定义一个架构过滤器。假设您在用户表前面加上模式名称 app234234_。为了防止迁移删除您的其他表,您可以在 config.yml/doctrine.yml 或您定义新用户架构的任何位置使用教义 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 处理的事情。

于 2019-07-17T08:50:52.533 回答