首页 > 解决方案 > 使用 Laravel 进行动态数据库连接

问题描述

我正在开发一个必须连接到多个数据库的新应用程序。当新公司在我的应用程序中注册时动态创建数据库,即每个公司都有数据库。

我的问题是如何使用 laravel 建立数据库连接,

如果公司管理员登录,他需要连接相应的数据库。怎么可能???

如果数据库稳定,我知道如何建立多个数据库连接,例如,

'mysql1' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge1'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
...

'mysql2' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge2'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
...

但是如果数据库不稳定怎么可能???

如果我的问题不达标,请见谅

标签: laraveldatabase-connection

解决方案


首先,您必须知道数据库连接参数的存储位置。无论如何,无论他们在哪里,您都应该即时创建一个新的连接。假设每个用户都有自己的连接......

<?php
use Illuminate\Support\Facades\Config;

$user = Users::find($id);
Config::set('database.connections.' . $user->username, array(
        'driver'    => 'mysql',
        'host'      => $user->db_host,
        'database'  => $user->db_name,
        'username'  => $user->db_user,
        'password'  => $user->db_pass,
            'charset'   => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix'    => '',
));
// And set the new connection to interested models
$myModel = new MyModel;
$myModel->setConnection($user->username);
$data = $myModel->where(...)->get();

希望这有帮助


推荐阅读