【问题标题】:Best way to connect multiple databases in Laravel [duplicate]在 Laravel 中连接多个数据库的最佳方法 [重复]
【发布时间】:2016-01-16 15:23:47
【问题描述】:

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

这是执行此操作的代码:

    // 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');
     }

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

【问题讨论】:

  • 如果你可以使用共享数据库多租户模式,已经为 laravel 做了一些工作。 github.com/AuraEQ/laravel-multi-tenant
  • @user993553 是的,我之前检查过,但正如我在标签中提到的那样,我希望它用于 Laravel-5.1,并且包是 4.2+
  • 找到另一个github.com/orchestral/tenanti 与 5 一起使用
  • 其实我已经开发了很多不想集成其他包所以只是问这是最好的方法。我

标签: php laravel-5.1 multi-tenant


【解决方案1】:

这几乎是做到这一点的最佳方式。最后,无论如何,这都是意见。但是,我会在配置文件中为每个子域创建一个连接。然后,在您的 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,
        ],

    ],

【讨论】:

  • 谢谢你的回复我也做了同样的@mikel。我忘了在这里给出答案。希望它会帮助其他人。
猜你喜欢
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多