Laravel:如何灵活地切换数据库?

时间:2017-08-31 11:26:17

标签: php mysql laravel

如何在laravel中灵活切​​换数据库?

例如:
有一个数据库db,它有一个表articles

id
title
content
status   //this field has 3 values: 1 or 2 or 3

同一主机上还有3个其他数据库db1db2db3
每个数据库中都有一个表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和模型中 我只是想在复制记录时创建一个新连接,然后在完成时断开它。

怎么做?

1 个答案:

答案 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 ..................