我正在研究必须连接到多个数据库的新应用程序。当在我的应用程序中注册了新公司时,即每个公司的数据库中都有新公司时,动态创建数据库。
我的问题是如何使用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', ''),
...
但是如果数据库不稳定,怎么可能????
如果我的问题不符合标准,请原谅
答案 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();
希望获得帮助