Symfony 4动态更改数据库

时间:2018-05-07 20:52:35

标签: php symfony

我正在开发一个博客平台,每个博客都有自己的数据库。

我需要动态切换数据库连接。

我理解文档

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

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

超过50个数据库。

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

谢谢

2 个答案:

答案 0 :(得分:2)

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

在Apache中:               #...

    SetEnv SUBDOMAIN_NAME "db_name"
</VirtualHost>

在用于开发的.env文件中(这将在产品的apache配置文件中放到上面)基本上,只需从URL中删除数据库名称

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

最后,在我的doctrine.yaml中的参数下,设置一个默认值。这样,我们不会为未配置的客户带来错误,并且可以向技术支持人员显示清晰的“必要安装”消息:

env(SUBDOMAIN_NAME): 'default_customer'

在doctrine.yaml中,将url的值替换为

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

答案 1 :(得分:1)

也许您可以从Controller尝试:

$sql = "USE dbname";
$stmt = $this->getDoctrine()->getManager()->getConnection()->prepare($sql);
$stmt->execute();