当我播种多个数据库时,我遇到了问题。第一个数据库种子工作正常。然而,播种第二个数据库失败。
对于第一个数据库,我使用适当的设置创建名为“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'
]);
这就是我无法使用相同的连接名修改数据库。
如果我为每个数据库创建一个新的连接名称,我可以成功运行迁移。不幸的是,在使用可变数据库连接名称时使用eloquent模型时,找到数据库名称有很多复杂情况。我确实有这个工作修改默认连接并保持eloquent连接变量未初始化,这不是一个很好的解决方案。了解如何保持连接名称相同是首选。
答案 0 :(得分:0)
现在回答我自己的问题,我有事情......
我使用变量名创建租户连接。 然后我使用config将其设置为默认连接。
public static function setDefaultDBC($system)
{
Config::set('database.default', $system->dbc());
}
连接名称类似于'tenant_1',其中1是在主db中找到的系统ID。我还可以在主数据库中指定一个特定的连接。
如果我需要切换系统,我每次都需要重新设置默认值。
不是我的首选,但除此之外,我必须为成千上万的电话指定连接。
主连接有一个名为'main'的连接