thinkphp6:訪問多個mysql數據源(thinkphp6.0.5 / php 7.4.9)


一,配置數據庫:

.env

APP_DEBUG = true
#APP_DEBUG = false

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE0]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = dig
USERNAME = root
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true

[DATABASE1]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = gorm
USERNAME = root
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

 

說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest

         對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/

說明:作者:劉宏締 郵箱: 371125307@qq.com

 

二,配置php對數據庫的連接

config/database.php

<?php

return [
    // 默認使用的數據庫連接配置
    'default'         => env('database.driver', 'mysql0'),

    // 自定義時間查詢規則
    'time_query_rule' => [],

    // 自動寫入時間戳字段
    // true為自動識別類型 false關閉
    // 字符串則明確指定時間字段類型 支持 int timestamp datetime date
    'auto_timestamp'  => true,

    // 時間字段取出后的默認時間格式
    'datetime_format' => 'Y-m-d H:i:s',

    // 數據庫連接配置信息
    'connections'     => [
        'mysql0' => [
            // 數據庫類型
            'type'            => env('database0.type', 'mysql'),
            // 服務器地址
            'hostname'        => env('database0.hostname', '127.0.0.1'),
            // 數據庫名
            'database'        => env('database0.database', ''),
            // 用戶名
            'username'        => env('database0.username', 'root'),
            // 密碼
            'password'        => env('database0.password', ''),
            // 端口
            'hostport'        => env('database0.hostport', '3306'),
            // 數據庫連接參數
            'params'          => [],
            // 數據庫編碼默認采用utf8
            'charset'         => env('database0.charset', 'utf8'),
            // 數據庫表前綴
            'prefix'          => env('database0.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,
        ],
        // 更多的數據庫配置信息
        'mysql1' => [
            // 數據庫類型
            'type'            => env('database1.type', 'mysql'),
            // 服務器地址
            'hostname'        => env('database1.hostname', '127.0.0.1'),
            // 數據庫名
            'database'        => env('database1.database', ''),
            // 用戶名
            'username'        => env('database1.username', 'root'),
            // 密碼
            'password'        => env('database1.password', ''),
            // 端口
            'hostport'        => env('database1.hostport', '3306'),
            // 數據庫連接參數
            'params'          => [],
            // 數據庫編碼默認采用utf8
            'charset'         => env('database1.charset', 'utf8'),
            // 數據庫表前綴
            'prefix'          => env('database1.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,
        ],
    ],
]

說明:mysql0和mysql1分別使用database0和database1這兩個數據庫配置

 

三,如何訪問多數據源?看例子:

1,兩個model

app/api/model/article/Article.php

<?php
namespace app\api\model\article;

//use business\Basic\BaseModel;
use think\Model;

class Article extends Model
{
    protected $pk = 'id';
    protected $name = 'article';
    public static function getArticleOne($id = '', $field = '*'){
        return self::connect("mysql0")->where('articleId', $id)->find();
    }
}

 

app/api/model/user/User.php

<?php
namespace app\api\model\user;

//use business\Basic\BaseModel;
use think\Model;

class User extends Model
{
    protected $pk = 'id';
    protected $name = 'user';
    public static function getUserOne($id = '', $field = '*'){
        return self::connect("mysql1")->where('id', $id)->find();
    }

}

說明:注意使用connect指定數據庫連接

 

2,app/api/controller/Index.php

<?php
declare (strict_types = 1);

namespace app\api\controller;

use app\api\model\article\Article;
use app\api\model\user\User;
use business\Result\Result;
use think\facade\Request;

class Index
{
    public function index()
    {
        return '您好!這是一個[api]示例應用';
    }
    //訪問兩個庫的例子
    public function twobase(){
        //查詢得到一篇文章
        $articleId = 1;
        $article = Article::getArticleOne($articleId);

        //查詢得到一個用戶的信息
        $userId = 2;
        $user = User::getUserOne($userId);
        
        //返回
        $res = array("article"=>$article,
            "user"=>$user,);
        return Result::Success($res);
    }
}

 

四,測試效果:

1,訪問:

http://127.0.0.1:81/api/index/twobase

返回:

 

成功讀取了兩個庫中的數據

 

五,查看thinkphp的版本

liuhongdi@ku:/data/php/mytp$ php think version
v6.0.5

 

六,查看php的版本:

liuhongdi@ku:/data/logs/phplogs/tlog/202012$ php --version
PHP 7.4.9 (cli) (built: Oct 26 2020 15:17:14) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies

 


免責聲明!

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



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