sql

Thinkphp 6 – 連線配置多個數據庫並實現自由切換(詳細過程及例項demo)


前言

有時候,我們需要配置多個數據庫,根據業務查詢每個資料庫下不同的表。

接下來,我們一步一步實現。

一、建立資料庫

我這裡測試使用的是本地環境(127.0.0.1)。

建立如下圖所示 資料庫及表(使用者表 / 管理員表),簡單寫點東西

在這裡插入圖片描述在這裡插入圖片描述
在這裡插入圖片描述在這裡插入圖片描述

  • admin(資料庫名):administrator_information(表名)
  • user(資料庫名):essential_information(表名)

二、配置資料庫

注意:資料庫連線引數(如使用者名稱密碼)應為你個人的,這裡暫時用我的,請自行更改。

Thinkphp 6 目錄中依次定位【config】 →【database.php】,將剛才建立的資料庫資訊寫入配置:

// 資料庫連線配置資訊
// 我們可以在資料庫配置檔案中定義多個連線資訊
// 可理解為每個陣列項即為一個數據庫

'connections'     => [

  /**
    * 使用者
    */
   'user' => [
       // 資料庫型別
       'type'              => '',
       // 伺服器地址
       'hostname'          => '127.0.0.1',
       // 資料庫名
       'database'          => 'user',
       // 使用者名稱
       'username'          => 'root',
       // 密碼
       'password'          => 'root',
       // 埠
       'hostport'          => '3306',
       // 資料庫連線引數
       'params'            => [],
       // 資料庫編碼預設採用utf8
       'charset'           => 'utf8',
       // 資料庫表字首
       'prefix'            =>  '',

       // 資料庫部署方式:0 集中式(單一伺服器),1 分散式(主從伺服器)
       'deploy'            => 0,
       // 資料庫讀寫是否分離 主從式有效
       'rw_separate'       => false,
       // 讀寫分離後 主伺服器數量
       'master_num'        => 1,
       // 指定從伺服器序號
       'slave_no'          => '',
       // 是否嚴格檢查欄位是否存在
       'fields_strict'     => true,
       // 是否需要斷線重連
       'break_reconnect'   => false,
       // 監聽SQL
       'trigger_'       => env('_debug', true),
       // 開啟欄位快取
       'fields_cache'      => false,
       // 欄位快取路徑
       'schema_cache_path' => app()->getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR,
   ],

   /**
    * 管理員
    */
   'admin' => [
       // 資料庫型別
       'type'              => 'mysql',
       // 伺服器地址
       'hostname'          => '127.0.0.1',
       // 資料庫名
       'database'          => 'admin',
       // 使用者名稱
       'username'          => 'root',
       // 密碼
       'password'          => 'root',
       // 埠
       'hostport'          => '3306',
       // 資料庫連線引數
       'params'            => [],
       // 資料庫編碼預設採用utf8
       'charset'           => 'utf8',
       // 資料庫表字首
       'prefix'            =>  '',

       // 資料庫部署方式:0 集中式(單一伺服器),1 分散式(主從伺服器)
       'deploy'            => 0,
       // 資料庫讀寫是否分離 主從式有效
       'rw_separate'       => false,
       // 讀寫分離後 主伺服器數量
       'master_num'        => 1,
       // 指定從伺服器序號
       'slave_no'          => '',
       // 是否嚴格檢查欄位是否存在
       'fields_strict'     => true,
       // 是否需要斷線重連
       'break_reconnect'   => false,
       // 監聽SQL
       'trigger_sql'       => env('app_debug', true),
       // 開啟欄位快取
       'fields_cache'      => false,
       // 欄位快取路徑
       'schema_cache_path' => app()->getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR,
   ],
],

三、建立控制器

準備工作全部完成,接下來開始測試。

建立一個控制器 Database.php(隨便) ,用於顯示測試結果:

<?php 
 app\controller;

// 使用門面類(Db)
use think\facade\Db;

class Database
{
    /**
     * 連線資料庫:user(essential_information表)
     * @return Array
     */
    public function user()
    {
        // 讀取user資料庫中essential_information表所有記錄
        // @connect: 選擇資料庫
        // @table:選擇該資料庫的表
        $query = Db::connect('user') -> table('essential_information') -> select();
        return json($query);
    }

    /**
     * 連線資料庫:admin(administrator_information表)
     * @return Array
     */
    public function admin()
    {
        // 讀取admin資料庫中administrator_information表所有記錄
        $query = Db::connect('admin') -> table('administrator_information') -> select();
        return json($query);
    }

}

在這裡插入圖片描述
在這裡插入圖片描述

本文章已修改原文用詞符合繁體字使用者習慣使其容易閱讀

版權宣告:此處為CSDN博主「王佳斌」的原創文章,依據CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:https://blog.csdn.net/weixin_44198965/article/details/108266519