Saltar al contenido

Laravel: conéctese a bases de datos dinámicamente

Solución:

La solución más simple es establecer la configuración de su base de datos en tiempo de ejecución. Laravel podría esperar que estas configuraciones se carguen desde el config/database.php archivo, pero eso no significa que no pueda configurarlos o cambiarlos más adelante.

La configuración cargada desde config/database.php se almacena como database en la configuración de Laravel. Es decir, el connections matriz dentro config/database.php se almacena en database.connections.

Por lo tanto, puede anular / cambiar fácilmente estas conexiones de esta manera:

Config::set("database.connections.mysql", [
    "host" => "...",
    "database" => "...",
    "username" => "...",
    "password" => "..."
]);

A partir de ahí, cualquier modelo de Eloquent que utilice este mysql conexión utilizará esta nueva configuración de conexión de base de datos.

Recomendaría hacer esto en un proveedor de servicios si es posible.

Me he encontrado con el mismo problema.

En realidad, puede cambiar la configuración de la base de datos en tiempo de ejecución y usarla.

Utilice la función config () para establecer configuraciones de conexión adicionales o sobrescribir las existentes.

config(['database.connections.mynewconnection' => {settings here}]);

Tenga en cuenta que estas configuraciones se almacenan en caché. Entonces, cuando necesite usar la nueva configuración, purgue la caché de la base de datos para la conexión que va a usar.

DB::purge('mynewconnection');

También puede manipular la conexión predeterminada que se utiliza. Esto puede resultar útil si desea utilizar migraciones en diferentes conexiones y realizar un seguimiento de ellas con una tabla de migración dentro de la conexión utilizada. U otras cosas interesantes, por supuesto …

DB::setDefaultConnection('mynewconnection');

Es posible que deba utilizar estos:

use IlluminateSupportFacadesConfig;
use DB;

Establecer configuraciones de base de datos:

        Config::set("database.connections.mysql_external", [
            'driver' => 'mysql',
            "host" => "localhost",
            "database" => "db_name",
            "username" => "root",
            "password" => "root",
            "port" => '8889',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ]);

Conéctese a la base de datos y haga cosas:

    $users = DB::connection('mysql_external')->select('Select id from users');

Desconecte la base de datos y restablezca las variables de configuración

        DB::disconnect('mysql_external');
        Config::set("database.connections.mysql_external", [
            'driver' => 'mysql',
            "host" => "localhost",
            "database" => "",
            "username" => "",
            "password" => "",
            "port" => '',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ]);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *