Symfony 4 меняет базы данных на лету - PullRequest
0 голосов
/ 07 мая 2018

Я работаю на платформе блога, у каждого блога есть своя база данных.

Мне нужно переключить соединение с базой данных на лету.

Я понимаю документацию

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

Но я бы не хотел добавлять все в конфигурационный файл, так как существует более

, чем 50 баз данных.

Я пытался адаптировать этокод для Symfony 4, но я не могу заставить его работать https://stackoverflow.com/a/9291896/9726140

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Я выяснил кое-что для моей собственной ситуации, в которой у каждого клиента был свой собственный поддомен. Я могу воспользоваться разделом виртуальных хостов конфигурации apache, чтобы добавить дополнительную переменную среды и использовать ее для задания имени базы данных.

В апаче: # ...

    SetEnv SUBDOMAIN_NAME "db_name"
</VirtualHost>

В моем .env для разработки (это будет описано выше в конфигурации apache для prod). В основном, просто удалите имя базы данных из 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)%'
0 голосов
/ 08 мая 2018

Может быть, вы можете попробовать это из контроллера:

$sql = "USE dbname";
$stmt = $this->getDoctrine()->getManager()->getConnection()->prepare($sql);
$stmt->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...