当我播种多个数据库时,我遇到了问题。第一个数据库种子工作正常。然而,播种第二个数据库失败了。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'
]);
这就是我被困在使用相同的连接名称修改数据库。
如果我为每个数据库创建一个新的连接名称,我可以成功运行迁移。不幸的是,当使用可变数据库连接名称时,在使用雄辩模型时会发现很多并发症。我确实有这个工作,正在修改默认连接,并保留了未初始化的雄辩连接变量,这不是一个好的解决方案。了解如何保持连接名称相同将是首选。