首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel登录后动态多数据库连接

Laravel登录后动态多数据库连接
EN

Stack Overflow用户
提问于 2020-11-09 03:25:16
回答 2查看 370关注 0票数 0

最近我正在开发一个店铺管理系统,每个店铺都有自己的数据库。用户在登录后可以从会话访问数据库连接。但是我不能自己建立这个系统。

EN

回答 2

Stack Overflow用户

发布于 2020-11-09 03:31:55

在运行时更改连接的一种方法是通过配置设置值:

代码语言:javascript
复制
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 facade指定一个连接:

代码语言:javascript
复制
DB::connection('mysql_new_connection')->select('');
票数 1
EN

Stack Overflow用户

发布于 2020-11-09 07:44:17

对于类似的应用程序,我有一个租户数据库和表,我在其中存储每个租户的子域和连接数据。

然后,我构建了一个中间件,如下所示:

代码语言:javascript
复制
<?php
namespace App\Http\Middleware;

use Config;
use Closure;
use App\Models\Tenant;

class SubdomainSetup
{

    public function handle($request, Closure $next)
    {
        $subdomain = $request->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中

代码语言:javascript
复制
protected $middleware = [
    .....
    \App\Http\Middleware\SubdomainSetup::class,
];

所以每个请求首先要经过这个设置。这样,您就可以根据子域名透明地设置连接。

简单,干净和安全。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64742176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档