引言:

有时候一个管理后台,需要涉及到多个数据库。比如,商城管理、直播管理、消息管理等等,它们都有自己的数据库。这个时候,就需要去连接多个数据库,进行处理了。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层,灵活的查询数据。

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

tp5实现多数据库查询的更多相关文章

  1. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  2. [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值

    本文来自:http://www.cnblogs.com/mrchenzh/archive/2010/05/31/1747937.html /****************************** ...

  3. 各数据库查询前N条记录的SQL语句

    sql在不同数据库查询前几条数据 1. ORACLE SELECT * FROM TABLE_NAME WHERE ROWNUM <= N;  HQL: from table_name t or ...

  4. Atitit  DbServiceV4qb9 数据库查询类库v4 新特性

    Atitit  DbServiceV4qb9 数据库查询类库v4 新特性     V4新特性 安全特性,屏蔽了executeUpdate,使用v2版 Sql异常转换,特别转换了DuplicateEnt ...

  5. C#与mysql做ASP.NET网页数据库查询速度测试

    两种方法是:1,使用mysql数据库的存储过程:2,C#编码,做网页后台与mysql数据库连接,前台测试显示测试过结果下面我将分别讲解两种方法的具体实现. 1,使用mysql数据库的存储过程插入万条大 ...

  6. 第九十九天上课 PHP TP框架 数据库查询和增加

    在Model文件夹下创建模型,文件命名规则 : 表名Model.class.php <?php namespace Home\Model; use Think\Model; class yong ...

  7. mysql数据库查询pdo的用法

    最早的php对mysql数据库查询是mysql和mysqli方法,后来php的新版本进一步封住了该方法,于是又pdo,抛开php框架,使用pdo查询数据,使用也是相当简便 <?php ini_s ...

  8. 下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作

    下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...

  9. iBatis.Net(C#)数据库查询

    引用请注明http://www.cnblogs.com/13590/archive/2013/03/14/2958735.html  摘要:查询是数据库SQL语言的核心,本文介绍了通过iBatis.N ...

随机推荐

  1. linux mint(Ubuntu、Debian) 18修改环境变量

    修改环境变量 sudo gedit /etc/profile sudo gedit /etc/profile 在profile文件的末尾添加以下代码 export JAVA_HOME=/usr/lib ...

  2. nodejs 中使用 ftp

    转自原文 nodejs 中使用 ftp 1.  npm install ftp 项目 https://github.com/mscdex/node-ftp 2.  转自 http://www.open ...

  3. OpenCV特征点检測------Surf(特征点篇)

    Surf(Speed Up Robust Feature) Surf算法的原理                                                              ...

  4. 基于MySQL元数据的Hive的安装和简单測试

    引言: Hive是一种强大的数据仓库查询语言,类似SQL,本文将介绍怎样搭建Hive的开发測试环境. 1. 什么是Hive? hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为 ...

  5. 为powerpc交叉编译nginx

    HOST: MINT NGINX VERSION: nginx-1.8.0(nginx-1.8.0.tar.gz) ZLIB VERSION: zlib-1.2.8 PCRE VERSION: pcr ...

  6. 前端防止button被多次点击

    前端的部分逻辑有时候控制前端的显示.比方记录收藏数目等等.有时候多次反复点击会造成前端显示的bug.所以须要有部分逻辑推断去筛除掉反复多次的点击. 实现部分代码例如以下,主要是通过setTimeout ...

  7. hdu_2191多重背包

    用二维数组解的,因为忘了memset害我wa了好几发... #include<iostream> #include<cstdio> #include<cstring> ...

  8. 去除iframe滚动条

    主页面的IFRAME中添加:scrolling="yes" 子页面程序代码: 让竖条消失: <body style='overflow:scroll;overflow-x:a ...

  9. 乔治·霍兹(George Hotz):特斯拉、谷歌最可怕的对手!

    17岁破解iPhone,21岁攻陷索尼PS3:现在,他是埃隆·马斯克最可怕的对手.   黑客往事   许多年后,当乔治·霍兹(George Hotz)回首往事,一定会把2007年作为自己传奇人生的起点 ...

  10. JavaScript实现记住密码功能

    用js实现记住密码功能,但是前端记住密码不安全,最好还是不要用.我感觉这个记住密码应该是通过与后台建立一个会话来实现. 这个效果的测试地址在:http://ofoyou.com/blog/rePass ...