tp5實現多資料庫查詢

桃子紅了吶發表於2017-01-01

引言:

有時候一個管理後臺,需要涉及到多個資料庫。比如,商城管理、直播管理、訊息管理等等,它們都有自己的資料庫。這個時候,就需要去連線多個資料庫,進行處理了。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 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`], [`<`,$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層,靈活的查詢資料。

學會組織語言,學會撰寫文件,學會歸納總結。

本文轉自TBHacker部落格園部落格,原文連結:http://www.cnblogs.com/jiqing9006/p/7649830.html,如需轉載請自行聯絡原作者


相關文章