在登录后动态地使用多个数据库连接的Laravel
在登录后动态地使用多个数据库连接的Laravel
这个问题已经有了答案:
最近我正在使用Laravel进行商店管理系统的开发,每个商店都有自己的数据库。用户在登录后可以从会话中访问数据库连接。但是我自己无法建立这个系统。
admin 更改状态以发布 2023年5月21日
在运行时更改连接的一种方式是通过配置文件设置值:
config(['database.connections.mysql_new_connection' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'database_name'), 'username' => env('DB_USERNAME', 'user_name'), 'password' => env('DB_PASSWORD', 'password'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci' ]]);
然后您可以通过DB门面指定一个连接:
DB::connection('mysql_new_connection')->select('');
对于类似于这样的应用程序,我有一个租户数据库和表格,其中存储了每个租户的子域和连接数据。
然后,我构建了一个中间件,就像这样:
server()['HTTP_HOST']; $tenant = Tenant::where('subdomain', $subdomain)->firstOrFail(); config([ 'database.connections.mysql.tenantid' => $tenant->tenantid, 'database.connections.mysql.host' => $tenant->host, 'database.connections.mysql.database' => $tenant->database, 'database.connections.mysql.username' => $tenant->username, 'database.connections.mysql.password' => $tenant->password, ]); return $next($request); } }
并将其添加到我的全局Kernel.php中,
protected $middleware = [ ..... \App\Http\Middleware\SubdomainSetup::class, ];
因此,每个请求都首先经过此设置。这样,您可以根据子域名透明地设置连接。
简单、干净且安全。