Php Laravel:未定义索引:驱动程序

Php Laravel:未定义索引:驱动程序,php,mysql,laravel,Php,Mysql,Laravel,我正在使用Laravel 5.5,需要动态更改数据库, 例如,有两个数据库,db1和db2,每个数据库中都有一个表articles 现在我想将文章从db1复制到db2 在.env文件中,当前数据库是db1: DB_DATABASE=db1 我想在复制记录时动态更改它,我尝试这样做: public function test() { $articles=Article::all(); Config::set("database.connections.mysql", [

我正在使用Laravel 5.5,需要动态更改数据库,
例如,有两个数据库,
db1
db2
,每个数据库中都有一个表
articles

现在我想将文章从
db1
复制到
db2

.env
文件中,当前数据库是
db1

DB_DATABASE=db1
我想在复制记录时动态更改它,我尝试这样做:

public function test()
{
    $articles=Article::all();

    Config::set("database.connections.mysql", [
        "host" => "127.0.0.1",
        "database" => "db2",
        "username" => "root",
        "password" => ""
    ]);
    //DB::purge('mysql');  //this line exists or not,it has the same error.
    DB::table('articles')->insert($articles);
    dd('ok');
}
但有一个错误:

未定义索引:驱动程序

我有很多数据库,所以我不想在
.env
文件中更改它。
我该怎么办

更新:

config/database.php
中,它有两项:

'default' => env('DB_CONNECTION', 'mysql'),

'connections' => [

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

],
我试着

    Config::set("database.connections.mysql", [
       'mysql' => [
           "host" => "127.0.0.1",
           "database" => "db2",
           "username" => "root",
           "password" => ""
        ]
    ]);
错误仍然存在

public function test()
{
    $articles=Article::all();

    Config::set("database.connections.mysql", [
        "driver" => "mysql"
        "host" => "127.0.0.1",
        "database" => "db2",
        "username" => "root",
        "password" => ""
    ]);
    //DB::purge('mysql');  //this line exists or not,it has the same error.
    DB::table('articles')->insert($articles);
    dd('ok');
}
您缺少驱动程序,因为laravel需要您想要使用的数据库驱动程序,因为您使用的是database.connection.mysql它将设置该数组中的值,但仍然需要驱动程序

as for example 


'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),

        ],

错误是因为配置中缺少
驱动程序

更改连接的更好方法是在数据库配置文件中注册新连接,并在运行时更改连接

'connections' => [

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

    'newConnection' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => 'db2',
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
]
现在,您可以使用用于定义新连接的名称更改连接

更改默认连接

Config::set('database.default', 'newConnection');
DB::reconnect('newConnection');
或者更改查询生成器的连接

DB::connection('newConnection')->table('articles')->insert($articles);
或者,如果您使用的是雄辩的模型,则可以使用
connection
属性设置与模型关联的默认连接

protected $connection = 'newConnection';
或者在运行时通过调用
setConnection

(new User)->setConnection('newConnection');
如果要更改当前连接详细信息,可以根据需要进行更改

Config::set('database.connections.mysql.database', 'db2');
更改后,您需要致电

DB::reconnect('mysql');


在我的例子中,驱动程序和其他所有东西都配置好了,但当我碰到任何端点时,它抛出了那个错误。我无法使用php artisan命令删除缓存,所以对我来说,解决方案是从app/bootstrap/cache文件夹中手动删除缓存文件,因为旧配置仍然存在,并且无法识别新的数据库连接

您是否检查了config/database.php中的env('DB_CONNECTION','mysql')
?Sagar Gautam它有这个项。一种方法是使用DB::CONNECTION()创建到数据库的新连接。@Sagar Gautam但这种方法需要将数据库名称写入config/database.php,我有很多DataTase。然后在那里写整个连接将是一个问题,我不明白。defalut配置文件有
'driver'=>'mysql'
,请参阅我的更新。兄弟,你是自己放的,因此需要传递数组键值对。我有很多数据库。假设我有200个数据库,因此,我将添加200项。我不想这样做。你不想要什么呢??您只是将驱动程序索引添加到您的代码中,请参见ans的上半部分,我只是将驱动程序值添加到您的代码中,而没有添加任何内容else@Exprator我懂了。我误解了。
Config::set('database.connections.mysql.database','db2')它可以工作。
DB::purge('mysql');