用到了ThinkPHP框架的跨库调用,也就是多数据库调用。
综合文档,查看了下源码后写出的一种扩展性比较好的封装方法,可以调用多个数据库。

新建一个CommonModel模型

<?php
/**
 * Created by PhpStorm.
 * User: General
 * Date: 2015/7/31/0031
 * Time: 11:19
 */
namespace Admin\Model;

use Think\Model;

class CommonModel extends Model
{

    protected $connection;//定义连接信息,因为涉及到调试模式,所以在后面动态赋值。
    protected $tablePrefix = 'free_';//定义数据库表前缀

/**
 * 构造方法
 * 这里没有展示config.php,所以直接在这里赋值,比较直观。
 * 可以优化成用C函数来引入连接信息
 *
 * $this->connection = C('db_connct_1');
 */
    public function __construct($name='',$tablePrefix='',$connection='')
    {
        if(APP_DEBUG){//调试模式开启
            $this->connection = [
                'db_type' => 'mysql',
                'db_user' => 'root',
                'db_pwd' => 'chengxiaobai',
                'db_host' => 'debug.chengxiaobai.cn',
                'db_port' => '3306',
                'db_name' => 'chengxiaobai',
                'db_charset' => 'utf8mb4',
            ];
        }else{//线上环境
            $this->connection = [
                'db_type' => 'mysql',
                'db_user' => 'root',
                'db_pwd' => 'chengxiaobai',
                'db_host' => 'db.chengxiaobai.cn',
                'db_port' => '3306',
                'db_name' => 'chengxiaobai',
                'db_charset' => 'utf8mb4',
            ];
        }
        parent::__construct($name,$tablePrefix,$connection);
    }
}

其他需要跨库的model继承这个model就好了

<?php
/**
 * Created by PhpStorm.
 * User: General
 * Date: 2015/7/31/0031
 * Time: 11:18
 */
namespace Admin\Model;

use Think\Model;

/**
 * Class UsersModel
 * @package Admin\Model
 * 用户模型
 */
class UsersModel extends CommonModel
{
    protected $tableName = 'user';//自定义了表名称

    public function getInfo()
    {
        var_dump($this->limit(10)->select());
    }
}

很多共用的操作有可以放在CommonModel里面进行了。

比如对取出来的数据进行统一的类型转换,PHP做后台开发的时候取出来的都是String类型的,对于android和ios这种强类型开发语言的客户端来说,那就需要转换类型再返回给客户端。

本文由程小白创作,本文可自由转载、引用,但需署名作者且注明文章出处。

原文地址:https://www.chengxiaobai.cn/php/thinkphp-cross-library-call.html