【发布时间】:2019-12-01 01:28:41
【问题描述】:
我们在同一个应用程序上运行多个域。
目前,我们的数据库环境设置是将配置数据库复制到每个数据库服务器。从服务器拥有配置数据库和用户数据库。
我们通过检查使用的域来确定 RouteServiceProvider.php 上的数据库连接。
域 1 将与数据库服务器 A (config_db + A_user_db) 连接。 示例:
database.php
'connections' => [
'db_config' => [
'driver' => 'mysql',
'host' => '192.168.0.10',
'port' => 'XXXX',
'database' => 'config_db',
'username' => 'xxxx',
'password' => 'xxxx'
],
'db_user_a' => [
'driver' => 'mysql',
'host' => '192.168.0.10',
'port' => 'XXXX',
'database' => 'a_user_db',
'username' => 'xxxx',
'password' => 'xxxx'
],
]
域 2 将与数据库服务器 B ( config_db + B_user_db ) 连接。 示例:
database.php
'connections' => [
'db_config' => [
'driver' => 'mysql',
'host' => '192.168.0.5',
'port' => 'XXXX',
'database' => 'config_db',
'username' => 'xxxx',
'password' => 'xxxx'
],
'db_user_b' => [
'driver' => 'mysql',
'host' => '192.168.0.5',
'port' => 'XXXX',
'database' => 'b_user_db',
'username' => 'xxxx',
'password' => 'xxxx'
],
]
config db 与同一服务器上的用户数据库连接的用法如下:
$db_config = config('database.connections.db_config.database').'.';
$data['bank_name'] = User::rightJoin($db_config.'config_bank as cb','user.bank_id','=','cb.bank_id')->first(['cb.bank_name']);
我们如何保持我们的 db_config 灵活地加入当前用户数据库?
我们在数据库中定义了 db 的每个 DB 连接,我们尝试使用 config 常量,但我们的模型无法读取 config 的连接。
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
//
// get the encrypter service
$encrypter = app(\Illuminate\Contracts\Encryption\Encrypter::class);
if(Request()->go) {
$basepath = Request()->go;
Cookie::queue('go', $basepath, 60*24*7);
}
$row=Partner_domain::where('basepath',$basepath)->first();
if(($row)){
// returns db_user_a OR db_user_b
config(['database.default' => $row->db_name]);
}
parent::boot();
}
}
预期结果:
config('database.connections.db_config.database') 具有灵活的价值。
【问题讨论】:
标签: php mysql database laravel model