我想在laravel中动态的切换数据库,
比如现在有两个数据库,db1
和 db2
,里面都有一张表articles
。
现在我想把db1
中 articles
的记录查询出来,写入 db2
的articles
,
目前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'); //有没有这一行,都会出现同样的error
DB::table('articles')->insert($articles);
dd('ok');
}
运行上面的方法,出现如下错误:
Undefined index: driver
在 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,
],
],
因为有比较多数据库需要切换,所以不想去env文件中修改,也不想写死在config/database.php文件中。
所以问题就是应该怎么动态切换数据库呢?
方法一:多配置实现
配置文件照着新增一个配置:
使用
DB
门面连接不同数据库:也可以在模型中指定数据库连接:
方法二:使用 laravel 读写分离
database.php
配置文件:设置完毕之后,Laravel5默认将select的语句让read指定的数据库执行,insert/update/delete则交给write指定的数据库,达到读写分离的作用。
参考:
使用多数据库连接
Laravel 5 配置读写分离和源码分析