使用Laravel进行动态数据库连接

时间:2018-11-16 09:58:35

标签: laravel database-connection

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

我的问题是如何使用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', ''),
...

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

如果我的问题不符合标准,请原谅

2 个答案:

答案 0 :(得分:0)

您可以像这样动态添加数据库配置。

if(NULL === config()->get('database.connections.company')){
        config()->set('database.connections.company', [
            'driver'    => $companyDbDriver,
            'host'      => $companyDbHost,
            'port'      => $companyDbPort,
            'database'  => $companyDbName,
            'username'  => $companyDbUser,
            'password'  => $companyDbPassword,
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false
        ]);
    }

在模型中;将连接属性设置为'company'

/**
 * Connection configuration ID.
 *
 * @var string
 */
protected $connection = 'company';

如果您在调用使用数据库的模型之前不加载数据库的配置,会很麻烦,我会留给您。

答案 1 :(得分:0)

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

<?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();

希望获得帮助