Laravel 連接多個數據庫的方法及調用

1. 配置 .env 文件

/* 這部分是默認的數據庫設置 */
DB_CONNECTION=mysql
DB_HOST=123.xxx.ooo.110
DB_PORT=3306
DB_DATABASE=default_db_name
DB_USERNAME=default_username
DB_PASSWORD=default_password

/* 這部分是新增的數據庫設置 */
DB_HOST_NEW=119.xxx.ooo.74
DB_PORT_NEW=4412
DB_DATABASE_NEW=new_db_name
DB_USERNAME_NEW=new_db_username
DB_PASSWORD_NEW=new_db_password

2. 配置 \config\database.php 文件

/* 這是默認的設置 */
'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 新增的內容 */
'mysql_new' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST_NEW', 'localhost'),
    'port' => env('DB_PORT_NEW', '3306'),
    'database' => env('DB_DATABASE_NEW', 'forge'),
    'username' => env('DB_USERNAME_NEW', 'forge'),
    'password' => env('DB_PASSWORD_NEW', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],
……

3. 應用

3.1 Schema

在各種 Schema Builder 中使用,可以使用 Schema facade 類來連接任意想要連接的數據庫,只需要使用 connection() 方法即可,如 migration 文件中應用:

Schema::connection('mysql_new')->create('some_table', function($table)
{
    $table->increments('id'):
});

3.2 Query

在 Query Builder 類中也是使用 connection() 方法選擇數據庫即可:

$users = DB::connection('mysql_new')->select(...);

3.1 Eloquent

這是連接默認數據庫的 model 文件,直接使用表即可:

// \app\Models\Users.php 
class Users extends Model
{
    // 數據庫 'default_db_name' 中的 users 表
    protected $table = "users";
}

這是需要連接新增的數據庫的 model 文件,使用 $connection 屬性進行數據庫關聯:

// \app\Models\NewUsers.php
class NewUsers extends Model
{
    // 先連接新的數據庫設置(config\database.php 新增的字段名)
    protected $connection = 'mysql_new';
    
    // 數據庫 'new_db_name' 中的 users 表
    protected $table = "users";
}

然后在其他類文件中引用該 model 文件即可。

另外還可以在控制器中,運行程序的時候,通過 setConnection 方法定義連接:

<?php

class SomeController extends BaseController {

    public function someMethod()
    {
        $someModel = new SomeModel;

        $someModel->setConnection('mysql_new');

        $something = $someModel->find(1);

        return $something;
    }

}

4. 注意事項

4.1 關于配置

如果貪圖方便,可以不配置 .env 的內容,直接在 \config\database.php 文件中新增數據庫的地址端口賬號密碼等:

'mysql_new' => [
    'driver' => 'mysql',
    'host' => 'new_db_nost',
    'port' => 'new_db_port',
    'database' => 'new_db_name',
    'username' => 'new_db_username',
    'password' => 'new_db_password',
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

4.2 關于告警報錯

在 \config\database.php 文件中,如果默認的數據庫無法連接,在使用非默認數據庫的時候,程序運行過程中會報錯,所以要先保證默認數據庫能正常連接訪問,再使用非默認的數據庫。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 有時項目中可能會出現連接兩個以上mysql數據庫的情況,那么在laravel框架中我們應該怎么做了: 1.在配置文...
    MarksGui閱讀 2,935評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,568評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評論 25 709
  • 1.setState異步更新 不要直接修改state調用setState不會直接修改當前的state,而會將改變放...
    星月西閱讀 860評論 0 0
  • 清晨的鳥語 喚起塵世的喧囂 就連遠處 平素不常能見的山巒 也來湊著熱鬧 似一夜間 就綴滿了斑斕的金黃 徐來的清風 ...
    王智杰閱讀 248評論 0 0

友情鏈接更多精彩內容