前言:
有時候一個管理后臺,需要涉及到多個數據庫。比如,商城管理、直播管理、消息管理等等,它們都有自己的數據庫。這個時候,就需要去連接多個數據庫,進行處理了。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
(推薦教程:thinkphp教程)
我們可以在extra文件夾中,再創建幾個其他數據庫的配置,比如database_mall,database_live,database_app等。
2、初始化
在model模塊中進行初始化
<?php namespace appadminmodel; use thinkModel; use thinkDb; 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 appadminmodel; use thinkModel; use thinkDb; 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'],?['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; ??} }
更多編程相關內容,請關注php中文網thinkphp教程欄目!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END