我是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對象是空的。我不知道我想要做什麼是可能的,也許我必須留下那些按需要工作的長期開關語句,但感覺應該可以做到像我想要的那樣。我無法弄清楚,任何指導都會非常有幫助。
它應該是可能的! – hannesvdvreken
是的,感覺應該是這樣,但我根本不是Laravel的專家,我已經使用了相當長的一段時間而沒有提出任何事情。在其他方面,Laravel似乎允許你非常容易和乾淨地做事情,但我無法弄清楚這一點。 – George
@George你能否提供更多數據。爲什麼它是空的? '$ selected_database'從哪裏來?你的代碼應該工作。 – majidarif