ThinkPHP跨库调用
July 31, 2015
用到了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这种强类型开发语言的客户端来说,那就需要转换类型再返回给客户端。
本作品由 程小白 创作,采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可,可自由转载、引用但需署名作者且注明文章出处。
原文地址:https://www.chengxiaobai.cn/php/thinkphp-cross-library-call.html