博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thinkphp3.2跨数据库联合查询
阅读量:6315 次
发布时间:2019-06-22

本文共 2066 字,大约阅读时间需要 6 分钟。

hot3.png

使用情景:有些项目的数据库是独立部署在一台服务器上,而有时当前项目又需要使用其他项目的数据库。其实就是一个基于tp3.2的项目要连接两个数据库,并可以在一个模型上可以同时使用两个库。

一、配置

注:这里关于数据库表前缀最好在模型里通过属性tablePrefix设置,不建议DB_PREFIX' => 'think_'

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', ), );

二、设置主数据库公用模型

 

二、设置主数据库公用模型

 

三、设置主数据库下的一张表对应当前模型

where(array("id"=>2))->find(); }}

四、在主数据库下customan切换其他数据库

提示:使用tp模型中的db方法实现切换

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方法调用后返回当前的模型实例,直接可以继续进行模型的其他操作,所以该方法可以在查询的过程中动态切换

个人公众号

转载于:https://my.oschina.net/u/2456768/blog/1795683

你可能感兴趣的文章
iphone使用xib界面与和代码相关联的方法
查看>>
struts2对拦截器使用带实例
查看>>
Subset leetcode java
查看>>
【EM】代码理解
查看>>
国内车联网行业 2015年发展趋势
查看>>
winform 窗体实现增删改查(CRUD)窗体基类模式
查看>>
数据挖掘之推荐系统实践--基于用户的协同过滤算法
查看>>
让 ASP.NET JS验证和服务端的 双验证 更简单
查看>>
php 反射
查看>>
MyEclipse内存不足问题
查看>>
Deep Learning 深度学习 学习教程网站集锦
查看>>
Canu FAQ常见问题
查看>>
Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
查看>>
zabbix3配置短信报警
查看>>
(第8篇)实时可靠的开源分布式实时计算系统——Storm
查看>>
算法笔记_153:算法提高 判断名次(Java)
查看>>
理解Android线程创建流程(转)
查看>>
AngularJS中选择样式
查看>>
haproxy+keepalived(涵盖了lvs,nginx.haproxy比较)
查看>>
知足老师对于脚跟酸经验
查看>>