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://blog.imgtouch.com
本文: https://blog.imgtouch.com/index.php/2023/05/26/thinkphp6-fang-wen-duo-ge-mysql-shu-ju-yuan-thinkphp6-5-php/
对应的源码可以访问这里获取: 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