[英]Laravel 5 - Change connection database results in migration errors (tenant databases)
當我播種多個數據庫時,我遇到了問題。 第一個數據庫種子工作正常。 但是,播種第二個數據庫失敗。
對於第一個數據庫,我使用適當的設置創建一個名為“ 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”的連接,種子工作正常。 然后,我修改與數據庫_2的“租戶”連接。 種子在database_1上運行。
我讀到Laravel不會重新配置現有的數據庫連接。 因此添加
DB::reconnect('tenant');
似乎讓我開始使用數據庫,但是現在遷移失敗,抱怨遷移表不存在,出於某種原因,它不存在。
這是要遷移的命令,該命令已經過測試並且(通常)可以正常運行:
Artisan::call('migrate', [
'--path' => "database/migrations_tenant",
'--database' => $this->dbc, //which is 'tenant'
]);
這就是我在使用相同連接名修改數據庫時遇到的問題。
如果為每個數據庫創建一個新的連接名稱,則可以成功運行遷移。 不幸的是,在使用可變數據庫連接名稱時,使用雄辯的模型來查找數據庫名稱有很多麻煩。 我確實需要修改默認連接,並且使雄辯的連接變量未初始化,但這並不是一個很好的解決方案。 最好了解如何保持連接名稱相同。
現在回答我自己的問題,我的工作正在進行...
我用一個變量名創建一個租戶連接。 然后,我使用config將其設置為默認連接。
public static function setDefaultDBC($system)
{
Config::set('database.default', $system->dbc());
}
連接名稱類似於“ tenant_1”,其中1是在主數據庫中找到的系統ID。 我還可以在主數據庫中指定特定的連接。
如果需要切換系統,則每次都需要重新設置默認值。
不是我的最愛,但是否則我將不得不為數千個呼叫指定連接。
主連接具有名為“ main”的連接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.