【问题标题】:Laravel 5 - Change connection database results in migration errors (tenant databases)Laravel 5 - 更改连接数据库导致迁移错误(租户数据库)
【发布时间】:2016-01-04 15:17:31
【问题描述】:

当我为多个数据库播种时,我遇到了问题。第一个数据库种子工作正常。然而,播种第二个数据库失败。

对于第一个数据库,我使用适当的设置创建名称为“租户”的连接。像这样……

    $connections = Config::get('database.connections');
    $tenant_connection = [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => $this->database,
        'username'  => env('DB_USERNAME'),
        'password'  => env('DB_PASSWORD'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
        'port' => '3306'
    ];
    $connections['tenant'] = $tenant_connection;
    Config::set('database.connections', $connections);
    var_dump(Config::get('database.connections')); //its in there!!

对于第二个数据库,我保持连接名称相同,并更改连接中的数据库名称...非常简单。

Laravel 正在保存此连接。但是,它仍然使用原始数据库。假设我使用名为 database_1 的数据库创建了一个名为“租户”的连接,种子工作正常。然后我修改“租户”与 database_2 的连接。种子在 database_1 上运行。

我读到 Laravel 不会重新配置现有的数据库连接。因此添加

DB::reconnect('tenant');

似乎让我开始使用数据库,但是迁移现在失败了,抱怨迁移表不存在,由于某种原因它不存在。

这是要迁移的命令,经过测试并且(通常)可以正常工作:

Artisan::call('migrate', [
        '--path'     => "database/migrations_tenant",
        '--database' => $this->dbc, //which is 'tenant'
    ]);

这就是我在使用相同的连接名称修改数据库时遇到的问题。

如果我为每个数据库创建一个新的连接名称,我可以成功运行迁移。不幸的是,在使用可变数据库连接名称时使用 eloquent 模型时,查找数据库名称会很复杂。我确实有这个修改默认连接并使雄辩连接变量未初始化的工作,这不是一个很好的解决方案。最好了解如何保持连接名称相同。

【问题讨论】:

    标签: php laravel-5.1


    【解决方案1】:

    现在回答我自己的问题,我的工作正常......

    我创建了一个带有变量名的租户连接。 然后我使用 config 将其设置为默认连接。

    public static function setDefaultDBC($system)
    {
        Config::set('database.default', $system->dbc());
    }
    

    连接名称类似于“tenant_1”,其中 1 是在主数据库中找到的系统 ID。我还可以在主数据库中指定一个特定的连接。

    如果我需要切换系统,我需要每次都重新设置默认值。

    不是我的最爱,否则我将不得不为数千个呼叫指定连接。

    主连接有一个名为'main'的连接

    【讨论】:

      猜你喜欢
      • 2019-06-16
      • 1970-01-01
      • 2012-08-15
      • 2015-02-25
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      相关资源
      最近更新 更多