我正在开发一个博客平台,每个博客都有自己的数据库。
我需要动态切换数据库连接。
我理解文档
http://symfony.com/doc/current/doctrine/multiple_entity_managers.html
但是我想避免在配置文件中添加所有内容,因为还有更多
超过50个数据库。
我一直在尝试将此代码改编为symfony 4,但我无法使其正常工作 https://stackoverflow.com/a/9291896/9726140
谢谢
答案 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();