• 欢迎访问我的博客

Thinkphp针对某一条sql查询切换到主库

thinkphp iJiaxin 1年前 (2017-08-25) 543次浏览 0个评论 扫描二维码

公司项目使用的是 thinkphp3.2.3 版本,今天老大提出一个需求,要对某一条 sql 语句查询使用主库查询,其他查询依旧使用从库查询。通过查询 thinkphp3.2.3 手册发现官方用法如下:

官方这个用法使用起来不够灵活,于是自己动手改底层的 db driver 类

更改后的效果

改造后通过在需要使用主库查询的地方调用 master(true)方法就会使用主库去查询,示例:

原理

官方手册有描述,thinkphp 是在每次有实际的数据操作时采取连接数据库

需要注意的是,ThinkPHP 的数据库连接是惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。

因为 thinkphp3.2.3 所有的 select、find、getField、query 等方法的查询实际底层都是走的\ThinkPHP\Library\Think\Db\Driver.class.php类中的 query 方法,而查询操作的连接数据库就是在这个 query 方法中进行的,在这里可以设置连接主库还是从库,所以我们主要在这里改动一下代码

修改的代码

  • \ThinkPHP\Library\Think\Model.class.php类最后面添加方法代码如下:

  • \ThinkPHP\Library\Think\Db\Driver.class.php类添加属性如下:

  • \ThinkPHP\Library\Think\Db\Driver.class.php类最后面添加方法如下:

  • \ThinkPHP\Library\Think\Db\Driver.class.php类 query 方法修改代码如下:

修改前

修改后

通过以上几处修改就可以在需要使用主库查询的地方调用 master(true)方法进行主库查询操作

附:数据库配置文件

 

 


iJiaxin 个人博客 , 版权所有丨如未注明 , 均为原创丨转载请注明原文链接:Thinkphp 针对某一条 sql 查询切换到主库

喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
157 queries in 2.283 seconds, using 10.97MB memory