• 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 appapimodelarticle;
    
    //use businessBasicBaseModel;
    use thinkModel;
    
    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 appapimodeluser;
    
    //use businessBasicBaseModel;
    use thinkModel;
    
    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 appapicontroller;
    
    use appapimodelarticleArticle;
    use appapimodeluserUser;
    use businessResultResult;
    use thinkfacadeRequest;
    
    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
  • 相关阅读:
    redis几种数据类型以及使用场景
    Ubuntu16.04安装redis和php的redis扩展
    详细透彻解读Git与SVN的区别(集中式VS分布式)
    bootstrap轮播如何支持移动端滑动手势
    vue添加cnzz统计访问量
    el-tabs值修改时更新路由参数值
    Vue ,elementUI,dropdown组件中command方法添加额外参数的方法
    vue页面滚动监听
    mintui tabbar底部跳转页面
    vue 引入bootstrap
  • 原文地址:https://www.cnblogs.com/architectforest/p/14202665.html
Copyright © 2020-2023  润新知