• 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'            => '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层,灵活的查询数据。

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

  • 相关阅读:
    Redhat MysqlReport安装配置详解
    asp.net中服务器端控件和客户端控件的交互问题
    关于弹出对话框返回值的分析
    关于父子窗口的参数传递(引用的高手的)
    呵呵!刚刚申请!
    Loadrunner教程
    性能测试常见用语
    如何删除电脑垃圾文件
    内连接和外连接
    酒桌上的规矩
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/7649830.html
Copyright © 2020-2023  润新知