Thinkphp多数据库动态切换_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1727 | 回复: 0   主题: Thinkphp多数据库动态切换        下一篇 
皇家特工
注册用户
等级:列兵
经验:102
发帖:2
精华:0
注册:2015-5-27
状态:离线
发送短消息息给皇家特工 加好友    发送短消息息给皇家特工 发消息
发表于: IP:您无权察看 2015-11-9 16:56:34 | [全部帖] [楼主帖] 楼主

Thinkphp作为国内使用广泛的PHP框架,功能很强大,数据库支持方面做的也很好,并支持mongo操作,我们的项目是配置了两台数据库,一主一从,读写分

离,最近要做一个活动,要求读写都在一个库上,所以需要动态建立多个数据库连接,主连接跟活动数据库连接,配置方式如下


首先配置默认数据库,两台,一主一从,读写分离

配置信息在项目工程文件夹下的Conf/config.php


'DB_TYPE'               => 'mysqli',     // 数据库类型 注意这里用的是mysqli
'DB_HOST'               => '10.1.80.28,10.1.80.29', // 服务器地址
'DB_NAME'               => 'rr_home',          // 数据库名
'DB_USER'               => '******',      // 用户名
'DB_PWD'                => '******',          // 密码
'DB_PORT'               => '3306,3307',        // 端口
'DB_PREFIX'             => 'rr_',     // 数据库表前缀
'DB_FIELDTYPE_CHECK'    => false,        // 是否进行字段类型检查
'DB_FIELDS_CACHE'       => true,         // 启用字段缓存
'DB_CHARSET'            => 'utf8',       // 数据库编码默认采用utf8
'DB_DEPLOY_TYPE'        => 1,         // 数据库部署方式:0 集中式(单一服务器),1 分布式
'DB_RW_SEPARATE'        => true,         // 数据库读写是否分离 主从式有效
'DB_MASTER_NUM'         => 1,            // 读写分离后 主服务器数量


配置好config.php之后,数据模型类继承thinkphp的核心类库Model类,那么该模型类便可以直接调用thinkphp提供的数据库操作方法


活动模型数据库配置


Conf文件夹下新建activity.php文件,活动库的配置信息写到该文件内


return array(
    'DB_CONFIG' => array(
        'db_type'  => 'mysql',   //注意这里用的是mysql
        'db_host'  => '10.1.80.28',
        'db_user'  => '******',
        'db_pwd'   => '******',
        'db_name'  => 'rr_activity',
        'db_port'  => '3306',
        'db_prefix'=> 'rr_'
    ),
);

config.php内加入以下代码加载activity.php扩展配置


'LOAD_EXT_CONFIG' => array('ACTIVITY'=>'activity'),

新建ActivityModel.class.php继承Model.class.php


<?php
/**
 * 活动model基类
 */
abstract class ActivityModel extends Model
{
    //mongo对象
    protected $m = null;
              
    protected $autoCheckFields = false;//取消自动检测表字段
          
    protected $table_name = '';
    protected $table_prefix = 'rr_';
    // protected $connection = "mysql://******:******@10.1.80.28:3306/rr_activity";
    protected $connection = array();
          
    public function __construct()
    {
        $this->table_prefix = $this->table_prefix ? $this->table_prefix : C('DB_PREFIX');
        $this->connection = !empty($this->connection) ? array_merge(C('ACTIVITY.DB_CONFIG'),$this->connection) : C('ACTIVITY.DB_CONFIG');
        parent::__construct($this->table_name,$this->table_prefix,$this->connection,888);
    }
}

注意:初始化调用父类Model类的构造方法,加了一个参数:888,这个代表该数据库连接的id,指定活动库的连接id为固定的888(默认mongo的连接id为999)


      其他活动用的类继承该活动父类,便可以直接调用thinkphp提供的数据库操作方法,并且读写只在10.1.80.28这一台数据库上。





                                                                                                                         --转自




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论