2016-07-24 68 views
1

我有一個項目必須通過這兩個網址us_myproject.comes_myproject.com訪問。Laravel 5 - 如何爲同一個laravel項目設置多個數據庫憑證(如果可能的話)?

他們共享相同的文件夾和代碼。實際上,只有一個laravel項目:htdocs/myproject

根據URL信息必須來自us_dbes_db,基於所使用的URL。

所以我的問題是如何設置.env數據庫憑據指向這兩個不同的數據庫。我有2個不同的數據庫,2個不同的用戶和2個不同的密碼。我怎樣才能完成這項任務?

我有這樣的跟蹤代碼的工作原理:

URL: us_myproject.com/dbtest 


.env 
DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=us_db 
DB_USERNAME=root 
DB_PASSWORD='' 

Route::get('dbtest',function(){//Works good 
$tblusertypes=DB::table("tblusertypes")->get(); 
return $tblusertypes; 
}); 

如果我做URL: es_myproject.com/dbtest應查詢對es_db但我不知道如何設置。任何想法?

回答

0

上的其他答案讀你的意見,我已經提出了以下解決方案:

  1. 打開配置/ database.php中:
 

    <?php 

    return [ 
     ... 

     'connections' => [ 

      ... 

      'mysql' => [ 
       'driver' => 'mysql', 
       'host'  => env('DB_HOST', 'localhost'), 
       'database' => env('DB_DATABASE', 'forge'), 
       'username' => env('DB_USERNAME', 'forge'), 
       'password' => env('DB_PASSWORD', ''), 
       'charset' => 'utf8', 
       'collation' => 'utf8_unicode_ci', 
       'prefix' => '', 
       'strict' => false, 
      ], 

      ... 

     ], 

     ... 

    ]; 
  • 編輯文件是這樣的:
  •  
    
        <?php 
    
        $config = [ 
         ... 
    
         'connections' => [ 
    
          ... 
    
          'mysql' => [ 
           'driver' => 'mysql', 
           'host'  => env('DB_HOST', 'localhost'), 
           'database' => env('DB_DATABASE', 'forge'), 
           'username' => env('DB_USERNAME', 'forge'), 
           'password' => env('DB_PASSWORD', ''), 
           'charset' => 'utf8', 
           'collation' => 'utf8_unicode_ci', 
           'prefix' => '', 
           'strict' => false, 
          ], 
    
          ... 
    
         ], 
    
         ... 
    
        ]; 
    
        if(Request::server('HTTP_HOST') == 'es_myproject.com') 
        { 
         $config['connections']['mysql'] = [ 
          'driver' => 'mysql', 
          'host' => 'esHOST', 
          'database' => 'esDB', 
          'username' => 'esUSER', 
          'password' => 'esPASSWORD', 
          'charset' => 'utf8', 
          'collation' => 'utf8_unicode_ci', 
          'prefix' => '', 
          'strict' => false, 
         ]; 
        } 
    
        return $config; 
    
    

    在這裏,我假定.env文件包含us_myproject.com的數據庫憑據。

    +0

    嗨,我看到你做了什麼。因此,您的想法是根據HTTP_HOST更改陣列內容 - 憑證。這是一個很好的選擇。但它提出了一個問題。這個改變將在SESSION結束之前可用,我的意思是讓用戶可以訪問主頁,Session將被設置爲一個特定的環境,在這種情況下,西班牙(es),然後他會去到另一頁,並嘗試插入一些sturff。環境已經坐了? – zwitterion

    +2

    我認爲這與SESSION沒有任何關係。這只是您用於特定主機的數據庫的問題。當他們隨時切換到另一臺主機時,憑證將被切換。 – Naveed

    1

    是的,你可以在Laravel設置超過1個數據庫,開放config/databaseconnection陣列設置像一回事一個新的數據庫中mysql陣列

    .env文件,你可以檢測一下數據庫是default

    要調用它:$result = DB::connection('my_new_database')->table('my_table')->get();

    +0

    NIce,以及如何在URL和數據庫之間建立連接?我的意思是,如果URL是'es_myproject.com',我怎樣才能將DB :: connection('es_myproject')'或'us_myproject.com'設置爲'DB :: connection('us_myproject')'? – zwitterion

    +0

    我不明白你的問題 –

    +0

    問題是我應該在哪裏創建url和數據庫之間的關係。我的意思是如果用戶鍵入'es_myproject.com'數據庫默認應該是'es_db'。如果用戶鍵入'us_myproject.com',則默認情況下數據庫應該是'us_db'。那麼,應該有一個條件,如果某些地方,對嗎? – zwitterion

    相關問題