能否在Symfony 4或5上使用相同的实体模型,但每个国家有不同的数据库连接?

问题描述 投票:-2回答:1

使用Symfony 4或5,我想建立一个单独的应用程序,通过实体管理器透明地使用默认的EM与doctrine对话,但根据当地语言改变连接。

我们的想法是如何在运行时检查locale,并决定在整个请求中使用正确的db连接。也就是 $doctrine->getEntityManager() 应该返回一个具有正确连接的管理器,既可以在仓库上使用,也可以通过防火墙处理auth和任何其他连接到DB的服务。

BONUS应该可以在运行命令时指定使用什么连接。

详细说明。- Symfony 4或更高版本。- PHP7>。- 每个国家都使用相同的模式。- 对于http请求,locale在url中。- 所有数据库的url都在env文件中。

我自己的尝试。

如果尝试延长 Doctrine\DBAL\Connection 使用doctrines config制作一个包装器,但没有找到改变所有连接设置的方法。(将URL改成主、从DB)对请求和控制台都有影响。

任何帮助都是非常感激的。

php symfony doctrine-orm symfony4 symfony5
1个回答
0
投票

它不是你的问题的直接解决方案,但可能是有帮助的。

当我想用相同的实体和模型有不同的数据库连接时,我可以使用多个连接,但这比什么都紧张。我不能包括自动测试和调试是可怕的。

去年我的解决方案是使用相同的代码,但配置不同。

  • 一个代码库藏在git或私人仓库里。
  • 为每个数据库连接提供不同的配置文件

所以现在我们已经把处理数据库连接的逻辑分开了,我们不能重用实体和模型。

在这之后,我开始使用docker。所以我用php:7.4-fpm创建了一个镜像。现在我可以用git仓库中提供的默认配置来启动这个容器。

如果我想改变数据库连接,我只需要把一个外部的.env.local挂载到镜像中,然后把它作为一个容器启动。

现在我有一个容器,一个是默认配置,一个是特定的数据库连接,两个都是并行运行,可以用它们不同的数据库连接自动测试。

希望对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.