2016-01-04 77 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'的連接