簡體   English   中英

Laravel 5-更改連接數據庫會導致遷移錯誤(租戶數據庫)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM