使用情景:有些项目的数据库是独立部署在一台服务器上,而有时当前项目又须要使用其余项目的数据库。其实就是一个基于tp3.2的项目要链接两个数据库,并能够在一个模型上能够同时使用两个库。php
1、配置mysql
注:这里关于数据库表前缀最好在模型里经过属性tablePrefix设置,不建议DB_PREFIX' => 'think_'git
<?php return array( // 数据库1 "db_option1" => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => 'root', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'temp_eshop', 'db_charset'=> 'utf8', ), // 数据库2 "db_option2" => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => 'root', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'temp_logitcs', 'db_charset'=> 'utf8', ), );
2、设置主数据库公用模型sql
<?php namespace Common\Model; use Think\Model; class BaseModel extends Model { // 主链接的数据库,db_option1为该数据库配置数组键 protected $connection = "db_option1"; }
2、设置主数据库公用模型数据库
<?php namespace Common\Model; use Think\Model; class BaseModel extends Model { // 主链接的数据库,db_option1为该数据库配置数组键 protected $connection = "db_option1"; }
3、设置主数据库下的一张表对应当前模型数组
<?php namespace Home\Model; use Think\Model; use Common\Model\BaseModel; class TestModel extends BaseModel{ // 继承父模型,表示在主数据库下的其中一张数据表,如下都是该数据库下的customan表的操做 protected $tableName = "customan"; public function currentDbTable() { return $this->where(array("id"=>2))->find(); } }
4、在主数据库下customan切换其余数据库服务器
提示:使用tp模型中的db方法实现切换ui
<?php namespace Home\Model; use Think\Model; use Common\Model\BaseModel; class TestModel extends BaseModel{ // 继承父模型,表示在主数据库下的其中一张数据表,如下都是该数据库下的customan表的操做 protected $tableName = "customan"; public function currentDbTable() { return $this->where(array("id"=>2))->find(); } // 多数据库下混合操做 public function getexids() { // 给主数据库设为编号1,而且此方法的$this已指向该数据库句柄 $this->db(1,"db_option1"); // 注意:越后的设置$this从新指向越日后,这里支持$this->db(2,"db_option2")->query("select * from user where uid=2")写法; $this->db(2,"db_option2"); // 编号1数据库链接的一张表的实例 $shop_products = $this->db(1)->table("products"); $shop_users = $this->db(1)->table("users"); // 编号2数据库链接的一张表的实例 $logitcs_customan = $this->db(2)->table("customan"); // 使用编号2数据库下一张表进行查询 $res = $logitcs_customan->select(); //$res = $shop_users->select(); //$customans = $this->select() // 返回这次结果 return $res; } }
总结 : 除了在预先定义数据库链接和实例化的时候指定数据库链接外,咱们还能够在模型操做过程当中动态的切换数据库,支持切换到相同和不一样的数据库类型。this
Model->db("数据库编号","数据库配置");spa
数据库编号用数字格式,对于已经调用过的数据库链接,是不须要再传入数据库链接信息的,系统会自动记录。对于默认的数据库链接,内部的数据库编号是0,所以为了不冲突,请不要再次定义数据库编号为0的数据库配置。
数据库配置的定义方式和模型定义connection属性同样,支持数组、字符串以及调用配置参数三种格式。
Db方法调用后返回当前的模型实例,直接能够继续进行模型的其余操做,因此该方法能够在查询的过程当中动态切换
我的公众号