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的朋友 经常问的一些问题。不断更新
Aug 11 PHP
PHP+jQuery实现自动补全功能源码
May 15 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
PHP中使用BigMap实例
Mar 30 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
PHP实现唤起微信支付功能
Feb 18 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中各种定义变量的方法小结
2017/10/18 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
JavaScript异步上传图片文件的实例代码
2017/07/04 Javascript
es6数值的扩展方法
2019/03/11 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
python实现在目录中查找指定文件的方法
2014/11/11 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
python日志模块logbook使用方法
2019/09/19 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
工厂门卫岗位职责
2013/11/25 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
故宫的导游词
2015/01/31 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
六年级数学教学反思
2016/02/16 职场文书
检讨书范文
2019/04/16 职场文书