如何在laravel中灵活切换数据库?
例如:
有一个数据库db
,它有一个表articles
id
title
content
status //this field has 3 values: 1 or 2 or 3
同一主机上还有3个其他数据库db1
,db2
,db3
,
每个数据库中都有一个表articles
,它们具有相同的结构:
id
title
content
status
目前,db
正在使用:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db
//...
现在通过不同状态db
查询文章:
class TestController extends Controller
{
public function copyArticles()
{
$articles_status_1 = Article::where('status', 1)->get();
$articles_status_2 = Article::where('status', 2)->get();
$articles_status_3 = Article::where('status', 3)->get();
}
}
然后我想将它们保存到目标数据库:
copy `$articles_status_1` to `articles` in `db1`
copy `$articles_status_2` to `articles` in `db2`
copy `$articles_status_3` to `articles` in `db3`
所以,我需要切换数据库,
我不想将配置添加到env
和模型中
我只是想在复制记录时创建一个新连接,然后在完成时断开它。
怎么做?
答案 0 :(得分:0)
在您的数据库配置中,您可以为db1,db2和db3添加另外3个连接
'mysql1' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'db1'),
....................
],
'mysql2' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => 'db2',
..............
],
在你的控制器之后你打电话
DB::setDefaultConnection('mysql1');
在db1
中保存文章后 切换到db 2后
DB::setDefaultConnection('mysq12');
您将文章保存在db2 ..................