Implementation of Multi database Query Based on tp5 of thinkPHP5 Framework

  • 2021-11-13 01:10:25
  • OfStack

In this paper, an example of tp5 (thinkPHP5) framework to achieve multi-database query method. Share it for your reference, as follows:

Introduction:

Sometimes a management background needs to involve multiple databases. For example, mall management, live broadcast management, message management and so on, all of which have their own databases. At this time, it is necessary to connect multiple databases for processing. thinkphp can support multiple database connections.

How to deal with it?

1. Configure multiple databases

The database information in database. php is connected by default.


<?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 [
  //  Database type 
  'type'      => 'mysql',
  //  Server address 
  'hostname'    => '',
  //  Database name 
  'database'    => '',
  //  Database user name 
  'username'    => '',
  //  Database password 
  'password'    => '',
  //  Database connection port 
  'hostport'    => '3306',
  //  Database encoding is adopted by default utf8
  'charset'     => '',
  //  Database table prefix 
  'prefix'     => ''
];

tp5 automatically loads database. php

We can create several other database configurations in the extra folder, such as database_mall, database_live, database_app, and so on.

Step 2 Initialize

Initialize in the model module


<?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');
  }
}

STEP 3 Use


$this->db_app->table('order')->select();

In this way, you can query the data in other databases.

Here's the full code:


<?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');
  }
  //  Get paging 
  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(); //  Paging 
    $data = $result->all(); //  Data 
    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;
  }
}

Summary: Flexible use of model layer, flexible query data.

Learn to organize language, write documents and summarize.

For more readers interested in thinkPHP related contents, please check the topics of this site: "ThinkPHP Introduction Tutorial", "thinkPHP Template Operation Skills Summary", "ThinkPHP Common Methods Summary", "codeigniter Introduction Tutorial", "CI (CodeIgniter) Framework Advanced Tutorial", "Zend FrameWork Framework Introduction Tutorial" and "PHP Template Technology Summary".

I hope this article is helpful to the PHP programming based on ThinkPHP framework.


Related articles: