Php 能够使用Laravel在运行时更改数据库连接
因此,我正在制作一个web应用程序,它应该能够按照计划将任何SQL语句上传到数据库中列出的任何服务器。它应该连接到数据库,执行语句,并根据收到的信息生成报告。然后它可以断开连接 目前,我有一个作业,它从数据库中获取所需的所有信息,例如主机、端口、数据库名等。我只需要建立一个连接,然后执行该语句 我使用的是Laravel框架 编辑:我不能修改任何数据库配置,因为数据库信息存储在表中,而不是配置文件中Php 能够使用Laravel在运行时更改数据库连接,php,sql,database,laravel,Php,Sql,Database,Laravel,因此,我正在制作一个web应用程序,它应该能够按照计划将任何SQL语句上传到数据库中列出的任何服务器。它应该连接到数据库,执行语句,并根据收到的信息生成报告。然后它可以断开连接 目前,我有一个作业,它从数据库中获取所需的所有信息,例如主机、端口、数据库名等。我只需要建立一个连接,然后执行该语句 我使用的是Laravel框架 编辑:我不能修改任何数据库配置,因为数据库信息存储在表中,而不是配置文件中 谢谢您可以在运行时通过以下方式进行设置: $connKey = 'CustomConnection
谢谢您可以在运行时通过以下方式进行设置:
$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'));
这将创建一个具有随机名称的新连接(因此,当在队列中执行多个连接时,它们不会清除同一数据库),为其分配详细信息,执行变量$statement中定义的select语句。然后从中创建excel电子表格。配置表是建模的还是php类?如果是这样,您可能可以设置一些东西,让您将该类设置为活动的。大概