首页 > 解决方案 > 每个国家/地区是否可以有不同的数据库连接,但在 Symfony 4 或 5 上具有相同的实体/模型?

问题描述

使用 Symfony 4 或 5,我试图让一个应用程序通过实体管理器透明地使用默认 EM 与教义对话,但会根据区域设置更改连接。

这个想法是一些如何检查运行时的语言环境并决定为整个请求使用正确的数据库连接。也就是说,$doctrine->getEntityManager()应该返回一个具有正确连接的管理器,既可以在存储库上使用,也可以由防火墙处理身份验证和连接到数据库的任何其他服务使用。

运行命令以指定要使用的连接时,应该可以使用 BONUS。

详细信息:
- Symfony 4 或更高版本。
- PHP 7>。
- 每个国家都使用相同的模型。
- 对于 http 请求,区域设置在 url 中。
- 所有数据库的 url 都在 env 文件中

我自己的尝试:

如果尝试Doctrine\DBAL\Connection使用学说配置扩展以制作包装器,但未能找到更改所有连接设置的方法。(将 URL 更改为主数据库和从数据库)对于请求和控制台。

任何帮助是极大的赞赏

标签: phpsymfonydoctrine-ormsymfony4symfony5

解决方案


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

当我想与相同的实体和模型建立不同的数据库连接时,我可以使用多个连接,但这比其他任何事情都更有压力。我不能包括自动测试和调试是可怕的。

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

  • 一个代码库隐藏在 git 或私有存储库中
  • 每个数据库连接的不同配置文件

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

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

如果我想更改数据库连接,我只需将外部 .env.local 挂载到映像中并将其作为容器启动。

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

希望这对您有所帮助。


推荐阅读