2019独角兽企业重金招聘Python工程师标准>>>
使用情景:有些项目的数据库是独立部署在一台服务器上,而有时当前项目又需要使用其他项目的数据库。其实就是一个基于tp3.2的项目要连接两个数据库,并可以在一个模型上可以同时使用两个库。
一、配置
注:这里关于数据库表前缀最好在模型里通过属性tablePrefix设置,不建议DB_PREFIX' => 'think_'
<?phpreturn 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',),);
二、设置主数据库公用模型
<?phpnamespace Common\Model;use Think\Model;class BaseModel extends Model {// 主连接的数据库,db_option1为该数据库配置数组键protected $connection = "db_option1";}
二、设置主数据库公用模型
<?phpnamespace Common\Model;use Think\Model;class BaseModel extends Model {// 主连接的数据库,db_option1为该数据库配置数组键protected $connection = "db_option1";}
三、设置主数据库下的一张表对应当前模型
<?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();}}
四、在主数据库下customan切换其他数据库
提示:使用tp模型中的db方法实现切换
<?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;}}
总结 : 除了在预先定义数据库连接和实例化的时候指定数据库连接外,我们还可以在模型操作过程中动态的切换数据库,支持切换到相同和不同的数据库类型。
Model->db("数据库编号","数据库配置");
数据库编号用数字格式,对于已经调用过的数据库连接,是不需要再传入数据库连接信息的,系统会自动记录。对于默认的数据库连接,内部的数据库编号是0,因此为了避免冲突,请不要再次定义数据库编号为0的数据库配置。
数据库配置的定义方式和模型定义connection属性一样,支持数组、字符串以及调用配置参数三种格式。
Db方法调用后返回当前的模型实例,直接可以继续进行模型的其他操作,所以该方法可以在查询的过程中动态切换
个人公众号