一,配置數據庫:
.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