如何利用tp5框架實現多數據庫查詢

如何利用tp5框架實現多數據庫查詢

前言:

有時候一個管理后臺,需要涉及到多個數據庫。比如,商城管理、直播管理、消息管理等等,它們都有自己的數據庫。這個時候,就需要去連接多個數據庫,進行處理了。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'??????=&gt;?'mysql', ??//?服務器地址 ??'hostname'????=&gt;?'', ??//?數據庫名 ??'database'????=&gt;?'', ??//?數據庫用戶名 ??'username'????=&gt;?'', ??//?數據庫密碼 ??'password'????=&gt;?'', ??//?數據庫連接端口 ??'hostport'????=&gt;?'3306', ??//?數據庫編碼默認采用utf8 ??'charset'?????=&gt;?'', ??//?數據庫表前綴 ??'prefix'?????=&gt;?'' ];

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-&gt;db_app-&gt;table('order')-&gt;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?&amp;&amp;?$pagesize?&gt;?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(['&gt;',$paytime.'?00:00'],?['db_app-&gt;table('order') ??????-&gt;alias('o') ??????-&gt;where($where) ??????-&gt;join('customer?c','o.uid?=?c.Id') ??????-&gt;field('o.*,c.NickName?as?nickname')-&gt;paginate($pagesize,false,[ ????????'query'?=&gt;?[ ??????????'customer_id'=&gt;$customer_id, ??????????'nickname'=&gt;$nickname, ??????????'paytime'=&gt;$paytime ????????] ??????]); ????$page?=?$result-&gt;render();?//?分頁 ????$data?=?$result-&gt;all();?//?數據 ????foreach?($data?as?$k=&gt;$v)?{ ??????$data[$k]['diamond']?=?intval($v['money'])*10; ????} ????//????dump($this-&gt;db_app-&gt;getLastSql()); ????$total_diamond?=?$this-&gt;db_app-&gt;table('order')-&gt;where('type',3)-&gt;sum('money*10'); ????$outData['page']?=?$page; ????$outData['data']?=?$data; ????$outData['total_diamond']?=?$total_diamond; ????return?$outData; ??} }

更多編程相關內容,請關注php中文網thinkphp教程欄目!

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享