Laravel: динамически подключаться к базам данных
Я создаю приложение в Laravel 5 (.1), где необходимо подключиться к различным базам данных. Единственная проблема заключается в том, что он не знал, к каким базам данных он должен подключиться, поэтому использование database.php в config невозможно. Контроллер отвечает за подключение к динамически данным деталям связи.
Как я могу создать новое соединение с базой данных, включая использование класса DB? (Или это возможно)
Спасибо заранее!
Ответы
Ответ 1
Самое простое решение - настроить конфигурацию базы данных во время выполнения. Laravel может ожидать, что эти настройки будут загружены из файла config/database.php
, но это не значит, что вы не сможете установить или изменить их позже.
Конфигурация, загруженная из config/database.php
, сохраняется в качестве database
в конфигурации Laravel. Это означает, что массив connections
внутри config/database.php
хранится в файле database.connections
.
Таким образом, вы можете легко переопределить/изменить эти соединения следующим образом:
Config::set("database.connections.mysql", [
"host" => "...",
"database" => "...",
"username" => "...",
"password" => "..."
]);
С этого момента все модели Eloquent, использующие это соединение mysql
будут использовать эту новую конфигурацию соединения с базой данных.
Я бы порекомендовал сделать это в сервис-провайдере, если это возможно.
Ответ 2
Я наткнулся на ту же проблему.
Фактически вы можете изменить настройки базы данных во время выполнения и использовать их.
Используйте функцию config(), чтобы установить дополнительные или перезаписать существующие настройки подключения.
config(['database.connections.mynewconnection' => {settings here}]);
Имейте в виду, что эти настройки кэшируются. Поэтому, когда вам нужно использовать новые настройки, очистите кеш БД за соединение, которое вы собираетесь использовать.
DB::purge('mynewconnection');
Вы также можете использовать соединение по умолчанию, которое используется. Это может пригодиться, если вы хотите использовать миграции по разным подключениям и отслеживать их с помощью таблицы миграции в используемом соединении. Или другие крутые вещи, конечно...
DB::setDefaultConnection('mynewconnection');
Ответ 3
Если кто-то ищет пакет для этого, это может помочь