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 03 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
Oct 03 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP实现微信退款功能
Oct 02 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
php文件后缀不强制为.php的实操方法
Sep 18 PHP
php 的多进程操作实践案例分析
Feb 28 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中字符安全过滤函数使用小结
2015/02/25 PHP
激活 ActiveX 控件
2006/10/09 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python应用库大全总结
2018/05/30 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
python分布式计算dispy的使用详解
2019/12/22 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
python中return不返回值的问题解析
2020/07/22 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
Python的两道面试题
2013/06/29 面试题
毕业生文员求职信
2013/11/03 职场文书
实习评语
2013/12/16 职场文书
宪法宣传周工作方案
2014/05/26 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python