首页 > 解决方案 > Symfony 4 动态更改数据库

问题描述

我在一个博客平台上工作,每个博客都有自己的数据库。

我需要即时切换数据库连接。

我了解文档

http://symfony.com/doc/current/doctrine/multiple_entity_managers.html

但我想避免在配置文件中添加所有内容,因为还有更多

超过 50 个数据库。

我一直在尝试将此代码改编为 symfony 4,但我无法使其工作 https://stackoverflow.com/a/9291896/9726140

谢谢

标签: phpsymfony

解决方案


我想出了一些适合我自己的情况的方法,在这种情况下,每个客户都有自己的子域。我可以利用 apache 配置的虚拟主机部分来添加一个额外的环境变量并使用它来设置数据库名称。

在阿帕奇:# ...

    SetEnv SUBDOMAIN_NAME "db_name"
</VirtualHost>

在我的 .env 中进行开发(这将在 apache config 中用于产品)基本上,只需从 URL 中删除数据库名称

DATABASE_URL=mysql://root:root@mysql:3306/

最后,在我的doctrine.yaml 参数下,我设置了一个默认值。这样,我们就不会为未配置的客户报错,并且可以为技术支持显示一条干净整洁的“必要设置”消息:

env(SUBDOMAIN_NAME): 'default_customer'

并在教义.yaml 中,将 url 的值替换为

url: '%env(resolve:DATABASE_URL)%%env(resolve:SUBDOMAIN_NAME)%'

推荐阅读