Php 能够使用Laravel在运行时更改数据库连接

Php 能够使用Laravel在运行时更改数据库连接,php,sql,database,laravel,Php,Sql,Database,Laravel,因此,我正在制作一个web应用程序,它应该能够按照计划将任何SQL语句上传到数据库中列出的任何服务器。它应该连接到数据库,执行语句,并根据收到的信息生成报告。然后它可以断开连接 目前,我有一个作业,它从数据库中获取所需的所有信息,例如主机、端口、数据库名等。我只需要建立一个连接,然后执行该语句 我使用的是Laravel框架 编辑:我不能修改任何数据库配置,因为数据库信息存储在表中,而不是配置文件中 谢谢您可以在运行时通过以下方式进行设置: $connKey = 'CustomConnection

因此,我正在制作一个web应用程序,它应该能够按照计划将任何SQL语句上传到数据库中列出的任何服务器。它应该连接到数据库,执行语句,并根据收到的信息生成报告。然后它可以断开连接

目前,我有一个作业,它从数据库中获取所需的所有信息,例如主机、端口、数据库名等。我只需要建立一个连接,然后执行该语句

我使用的是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'));

这将创建一个具有随机名称的新连接(因此,当在队列中执行多个连接时,它们不会清除同一数据库),为其分配详细信息,执行变量$statement中定义的select语句。然后从中创建excel电子表格。

配置表是建模的还是php类?如果是这样,您可能可以设置一些东西,让您将该类设置为活动的。大概