tp5(thinkPHP5)框架实现多数据库查询的方法


Posted in PHP onJanuary 10, 2019

本文实例讲述了tp5(thinkPHP5)框架实现多数据库查询的方法。分享给大家供大家参考,具体如下:

引言:

有时候一个管理后台,需要涉及到多个数据库。比如,商城管理、直播管理、消息管理等等,它们都有自己的数据库。这个时候,就需要去连接多个数据库,进行处理了。thinkphp可以支持多个数据库连接。

如何处理呢?

1.进行多个数据库的配置

默认会连接database.php中的数据库信息。

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
return [
  // 数据库类型
  'type'      => 'mysql',
  // 服务器地址
  'hostname'    => '',
  // 数据库名
  'database'    => '',
  // 数据库用户名
  'username'    => '',
  // 数据库密码
  'password'    => '',
  // 数据库连接端口
  'hostport'    => '3306',
  // 数据库编码默认采用utf8
  'charset'     => '',
  // 数据库表前缀
  'prefix'     => ''
];

tp5会自动加载database.php

我们可以在extra文件夹中,再创建几个其他数据库的配置,比如database_mall,database_live,database_app等。

2.初始化

在model模块中进行初始化

<?php
namespace app\admin\model;
use think\Model;
use think\Db;
class LiveRecharge extends Model
{
  protected $db_app;
  function __construct()
  {
    $this->db_app = Db::connect('database_app');
  }
}

3.使用

$this->db_app->table('order')->select();

这样就可以查询其他数据库中的数据了。

下面是全的代码:

<?php
namespace app\admin\model;
use think\Model;
use think\Db;
class LiveRecharge extends Model
{
  protected $db_app;
  function __construct()
  {
    $this->db_app = Db::connect('database_app');
  }
  // 获取分页
  public function getList($customer_id = '',$nickname = '',$paytime = '',$pagesize = '')
  {
    $pagesize = $pagesize && $pagesize > 0 ? $pagesize : config('default_page_size');
    $where = array();
    $where['o.type'] = 3;
    if ($customer_id) {
      $where['o.uid'] = $customer_id;
    }
    if ($nickname) {
      $where['c.NickName'] = ['like','%'.$nickname.'%'];
    }
    if ($paytime) {
      $where['o.addtime'] = array(['>',$paytime.' 00:00'], ['<',$paytime.' 23:59']);
    }
    $result = $this->db_app->table('order')
      ->alias('o')
      ->where($where)
      ->join('customer c','o.uid = c.Id')
      ->field('o.*,c.NickName as nickname')->paginate($pagesize,false,[
        'query' => [
          'customer_id'=>$customer_id,
          'nickname'=>$nickname,
          'paytime'=>$paytime
        ]
      ]);
    $page = $result->render(); // 分页
    $data = $result->all(); // 数据
    foreach ($data as $k=>$v) {
      $data[$k]['diamond'] = intval($v['money'])*10;
    }
    //    dump($this->db_app->getLastSql());
    $total_diamond = $this->db_app->table('order')->where('type',3)->sum('money*10');
    $outData['page'] = $page;
    $outData['data'] = $data;
    $outData['total_diamond'] = $total_diamond;
    return $outData;
  }
}

小结:灵活运用model层,灵活的查询数据。

学会组织语言,学会撰写文档,学会归纳总结。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
深入php数据采集的详解
Jun 02 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
[原创]php正则删除html代码中class样式属性的方法
May 24 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 PHP
php实现断点续传大文件示例代码
Jun 19 PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 #PHP
PHP微信支付结果通知与回调策略分析
Jan 10 #PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 #PHP
PHP如何通过表单直接提交大文件详解
Jan 08 #PHP
Laravel 队列使用的实现
Jan 08 #PHP
laravel 框架配置404等异常页面
Jan 07 #PHP
PHP array_shift()用法实例分析
Jan 07 #PHP
You might like
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
js实现点击烟花特效
2020/10/14 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Python实现网站注册验证码生成类
2017/06/08 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
python3 简单实现组合设计模式
2020/07/02 Python
用python写PDF转换器的实现
2020/10/29 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
生产车间主任的个人自我鉴定
2013/10/25 职场文书
最新的互联网创业计划书
2014/01/10 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
门面房租房协议书
2014/12/01 职场文书
银行稽核岗位职责
2015/04/13 职场文书
单独二胎证明
2015/06/24 职场文书
2016年母亲节广告语
2016/01/28 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python