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, // 读写分离后 主服务器数量
活动模型数据库配置
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_' ), );
'LOAD_EXT_CONFIG' => array('ACTIVITY'=>'activity'),
<?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)