【发布时间】: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