2016-01-04 78 views
0

当我播种多个数据库时,我遇到了问题。第一个数据库种子工作正常。然而,播种第二个数据库失败了。Laravel 5 - 更改连接数据库导致迁移错误(租户数据库)

对于第一个数据库,我使用适当的设置创建名为'tenant'的连接。像这样...

$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的数据库创建名为“tenant”的连接,种子可以正常工作。然后我修改'tenant'与database_2的连接。种子在database_1上运行。

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

DB::reconnect('tenant'); 

似乎让我使用的数据库,但在迁移现在失败,抱怨说,迁移表不存在,这对于一些原因,它不。

这里是迁移命令,它测试(通常)正常工作:

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

这就是我被困在使用相同的连接名称修改数据库。

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

回答

0

回答我的问题,现在我有事情的工作...

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

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

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

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

不是我的喜好,但否则我将不得不指定数千个电话的连接。

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