最佳方式在Laravel中连接多个数据库。

30 浏览
0 Comments

最佳方式在Laravel中连接多个数据库。

这个问题已经有答案了

如何在Laravel中使用多个数据库

我正在创建一个多租户应用程序,根据子域名连接到特定租户的数据库。

下面是连接数据库的代码:

    // To connect with a subdomain - the entry will be in config/database.php.
    public static function connectSubdomainDatabase($dbname)
    {
        $res = DB::select("show databases like '{$dbname}'");
        if (count($res) == 0) {
            App::abort(404);
        }
        Config::set('database.connections.subdomain.database', $dbname);
        //If you want to use query builder without having to specify the connection
        Config::set('database.default', 'subdomain');
        DB::reconnect('subdomain');
     }

这是连接数据库的最佳方式,还是因为每次有不同的子域名时我连接数据库会有问题?从性能角度考虑,最好的做法是什么?

admin 更改状态以发布 2023年5月24日
0
0 Comments

这几乎是做这件事的最佳方法。最终,这都是观点的问题。但是,在配置文件中为每个子域创建一个连接。然后,在connectSubdomainDatabase()函数中,我会获取当前子域,而不是传递数据库名称。在Laravel中已经可以指定连接,您应该只在配置文件中使用数据库名称。

所以,像这样:

// To connect with a subdomain - the entry will be in config/database.php.
public static function connectSubdomainDatabase()
{
    // Break apart host
    $urlParts = explode('.', $_SERVER['HTTP_HOST']);
    // Change default connection
    Config::set('database.default', $urlParts[0]);
 }

其中config/database.php连接为:

'connections' => [
        'subdomain1' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],
        'subdomain2' => [
                'driver'    => 'mysql',
                'host'      => env('DB_HOST', 'localhost'),
                'database'  => env('DB_DATABASE', 'forge'),
                'username'  => env('DB_USERNAME', 'forge'),
                'password'  => env('DB_PASSWORD', ''),
                'charset'   => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix'    => '',
                'strict'    => false,
        ],
    ],

0