因此,我正在製作一個Web應用程序,該應用程序應該能夠按計劃將任何SQL語句上載到數據庫中列出的任何服務器。它應該連接到數據庫,執行語句並根據收到的信息進行報告。然後它可以斷開。能夠通過Laravel在運行時更改數據庫連接
目前,我有一個適當的工作,它抓住了從數據庫中所需的所有信息,例如。主機,端口,DBName等我只需要形成一個連接,然後執行該語句。
我正在使用Laravel框架。
編輯:我無法修改任何數據庫配置,因爲數據庫信息存儲在表中,而不是配置文件。
感謝
因此,我正在製作一個Web應用程序,該應用程序應該能夠按計劃將任何SQL語句上載到數據庫中列出的任何服務器。它應該連接到數據庫,執行語句並根據收到的信息進行報告。然後它可以斷開。能夠通過Laravel在運行時更改數據庫連接
目前,我有一個適當的工作,它抓住了從數據庫中所需的所有信息,例如。主機,端口,DBName等我只需要形成一個連接,然後執行該語句。
我正在使用Laravel框架。
編輯:我無法修改任何數據庫配置,因爲數據庫信息存儲在表中,而不是配置文件。
感謝
您可以在運行時設置這樣說:
$connKey = 'CustomConnection';
$dbInfo = DatabaseInfo::find($databaseId);
Config::set('database.connections.' . $connKey, array(
'driver' => 'mysql',
'host' => $dbInfo->hostName,
'database' => $dbInfo->database,
'username' => $dbInfo->username,
'password' => $dbInfo->password,
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
'prefix' => '',
));
// Now you can set the new connection to the models
$myModel = new MyModel;
$myModel->setConnection($connKey);
// Or you can use it this way too:
$users = DB::connection($connKey)->select(...);
// Or, also:
$pdo = DB::connection($connKey)->getPdo();
我解決了這個在一個非常類似的方式來一個貼:
$connectionName = Crypt::encryptString(str_random(80));
DB::purge("$connectionName");
Config::set("database.connections.$connectionName", [
"driver" => "$Driver",
"port" => "$Port",
"host" => "$Host",
"database" => "$DBName",
"username" => "$UserName",
"password" => "$Password"
]);
$query = DB::connection("$connectionName")->select($statement);
$query= json_decode(json_encode($query), true);
Excel::create("$filename-$mytime", function($excel) use ($query, $filename) {
$excel->sheet("$filename", function($sheet) use ($query){
$sheet->fromArray($query);
});
})->store('xls', storage_path('excel/exports'));
這將創建一個新的連接一個隨機的名字(所以如果在一個隊列中,如果執行了多個它們不會清除同一個數據庫),給它分配細節,執行在變量$語句中定義的select語句。然後從中創建一個Excel電子表格。
配置表建模/一個PHP類?如果是這樣的話,你可能會設置一些讓你將該類設置爲活動的東西。也許。 – Kyrre