Laravel 配置連接多個數據庫以及如何使用


配置連接

配置 .env 文件

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

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

配置 \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,
],

使用

Schema

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

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

Query

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

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

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;
    }

}

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM