2014-04-23 38 views
0

我是Laravel的新手,並且正在使用一個應用程序,該應用程序使用來自超過四十個獨立數據庫的外部源提供的數據。我必須根據許多表單域來選擇在運行時查詢哪個數據庫。使用變量在Laravel中選擇數據庫連接

我能得到這個創建於database.php中的多個連接,然後使用switch語句控制器選擇數據庫工作,所以它看起來是這樣的:

case "1": 

$data_rows = DB::connection('mysqlxa01')->table('clientdata') 
    ->select('column1', 'column2', 'column3', 'column4') 
    ->where('column5', 'LIKE', "__MN57XX") 
    ->get(); 
    break; 

case "2": 

$data_rows = DB::connection('mysqlxa02')->table('clientdata') 
    ->select('column1', 'column2', 'column3', 'column4') 
    ->where('column5', 'LIKE', "__MN57XX") 
    ->get(); 
    break; 

等。我簡化了列和查詢的名稱,因爲這與問題無關。

問題是我有一個switch語句,除了數據庫連接名以外,還有超過40個'case'語句。

可以從提交的表單數據中生成所需數據庫的名稱,因爲名稱遵循可預測的順序,並且如果我可以將數據庫的名稱傳遞給DB,它看起來會更清晰:連接使用一個變量,所以它看起來像這樣:

$data_rows = DB::connection($selected_database)->table('clientdata') 
    ->select('column1', 'column2', 'column3', 'column4') 
    ->where('column5', 'LIKE', "__MN57XX") 
    ->get(); 
    break; 

這將完全不需要「switch」語句。

當我嘗試這樣做時發生的是,查詢返回沒有錯誤,但$ data_rows對象是空的。我不知道我想要做什麼是可能的,也許我必須留下那些按需要工作的長期開關語句,但感覺應該可以做到像我想要的那樣。我無法弄清楚,任何指導都會非常有幫助。

+0

它應該是可能的! – hannesvdvreken

+0

是的,感覺應該是這樣,但我根本不是Laravel的專家,我已經使用了相當長的一段時間而沒有提出任何事情。在其他方面,Laravel似乎允許你非常容易和乾淨地做事情,但我無法弄清楚這一點。 – George

+0

@George你能否提供更多數據。爲什麼它是空的? '$ selected_database'從哪裏來?你的代碼應該工作。 – majidarif

回答

0

好的,所以我有道歉。我決定在虛擬機中安裝另一個Laravel,並嘗試用簡化的應用程序來解決問題,當我重新創建控制器時,所有的工作都使用數據庫名稱的變量。

因此,我回到了Laravel的原始實例,並將VM中的代碼剪切並粘貼到相關控制器中,現在它可以工作。

某處肯定存在緩存問題,或者只是一個隨機控制字符或其他代碼。無論如何,它現在工作,併爲此浪費人們的時間道歉。