php - Symfony 4 动态更改数据库
问题描述
我在一个博客平台上工作,每个博客都有自己的数据库。
我需要即时切换数据库连接。
我了解文档
http://symfony.com/doc/current/doctrine/multiple_entity_managers.html
但我想避免在配置文件中添加所有内容,因为还有更多
超过 50 个数据库。
我一直在尝试将此代码改编为 symfony 4,但我无法使其工作 https://stackoverflow.com/a/9291896/9726140
谢谢
解决方案
我想出了一些适合我自己的情况的方法,在这种情况下,每个客户都有自己的子域。我可以利用 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)%'
推荐阅读
- c# - 在 Linq 中选择包含其他对象列表的新对象
- javascript - .toFixed 函数不适用于 js-object
- c# - 使用管理员权限和权限从 C# 执行 Powershell 脚本
- python - 在 python 中从 JSON 字典中搜索并获取值
- ios - UITextView 中的文本更改事件
- sqlite - 查询运行了几天
- scikit-learn - 如何从应用于多类问题的 LogisticRegressionCV 的输出中选择 C
- python - 无法在 Django 中导入名称“登录”
- android - 委托适配器不重用 ViewHolders
- javascript - nvd3 相同时间戳的正负值