1. 程式人生 > >Laravel配置控制器內切換多個數據庫(或任意切換多資料庫)

Laravel配置控制器內切換多個數據庫(或任意切換多資料庫)

1. 知識點:

    Laravel預設資料庫是取.env和datebase.php中mysql填寫的資料庫。

    如果需要切換多個數據庫,就需要填寫新的資料庫配置。

    新的資料庫不需要.env檔案依賴。

    如果需要.env,則請在.env設定。

2.  具體配置與說明:

1). config/datebase.php中配置方法和效果如下:

'mysql' => [ // 預設,需要讀取.env中資料庫的配置,有env
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'wxma'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => 'wx_',
    'strict' => true,
    'engine' => null,
],

'mysql_test' => [ // 新增的資料庫,沒有env
    'driver' => 'mysql',
    'host' => '127.0.0.1',
    'port' => '3306',
    'database' => 'bless3',
    'username' => 'root',
    'password' => '',
    'unix_socket' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => 't_',
    'strict' => true,
    'engine' => null,
],

注意:新的資料庫不依賴.env,因此不需要填寫。

2). 控制器中讀取出資料庫:

預設讀取資料庫   DB::table('wx_account')

讀取新增資料庫   DB::connection("mysql_test")->table("blesslist")

在你的控制器中:

use Illuminate\Support\Facades\DB;

  // 測試同時多資料庫連線函式

public function db_test(){
    $mysql = DB::table('wx_account')->select("id", "wx_login", "fans_property")->get(); // 預設資料庫
    $mysql_test = DB::connection("mysql_test")->table("blesslist")->get(); // 新建資料庫

    $back = [
        "mysql"=>$mysql,
        "mysql_test"=> $mysql_test,
    ];

    return json_encode($back, JSON_UNESCAPED_UNICODE);
}

3. 成功輸出兩個資料庫中的內容!

--注意---------------------------

需要env的話,需要在env提前宣告:

DB_CONNECTION=mysql_test
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=name
DB_USERNAME=root
DB_PASSWORD=

然後:

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

即可以了。沒試過,但是應該可以。