mysql配置项如何选择_不同环境中,如何优雅的选择数据库配置文件

前言

工作中,遇到线上和测试数据库分离的情况,起初,一开始都是在 config/database.php 下面修改的。在线上、测试服务器中在单独更改。每次,Git 提交的时候还要专门忽略database.php 在提交,非常的麻烦。于是,就是如下。

首先

从 config/database.php 入手,这里新建两个数据库配置数组,比如:

//测试数据库地址$db['test'] = array(

'dsn'=> '',

'hostname' => '测试地址',

'use'save_queries' => TRUE,// 以下其他配置省略);// 正式数据库地址$db['production'] = array('dsn'=> '','hostname' => '正式地址','use'save_queries' => TRUE,

// 以下其他配置省略);

这里,就有两个数据库配置地址了。

再去,配置测试环境的配置文件,就在 config/config.php 目录下,新建一个获取数据库配置名的数组。 值就是上面 config/database.php 对应的key。

/*测试环境数据库名*/

$config['sql']['sqlname'] = 'test';

再去,config目录下,新建一个production目录,这个作用于生产环境的配置文件。

在这里面新建一个 config.php文件(config/production/config.php),也可以复制上一层目录的那个 config.php文件,在里面写上同样的。

/*正式环境数据库名*/

$config['sql']['sqlname'] = 'production';

接着, 就是完成什么测试环境的时候访问的是测试的配置文件。正式环境的时候访问的是正式的配置文件。

这个呢,就可以是在入口文件index.php 配置一下。其实,默认本来也是可以的。

// 默认 index.php 56行define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

但是我为了更直观的访问就改成了如下.

//如果是正式环境域名访问的就是读取正式环境的配置文件,否则都读取测试环境的配置文件 if($_SERVER['SERVER_NAME'] == '正式环境域名'){

define('ENVIRONMENT','production');

}else{

define('ENVIRONMENT','development');

}

再然后, 就是要折腾 model目录了。我这里采用的是多个继承一个,就是在 model目录新建一个 Base_Model.php ,其他 model文件在继承于它。而这个文件主要作用就是,选择合适的数据库配置文件,以及 sql 的编写。

具体代码,类似如下,核心就是 __construct 里的方法:

class Base_Model extends CI_Model {

protected $mTable;

//主键 protected $mPkId = 'id';

public function __construct()

{

//这个就会根据 index.php 文件的访问,读取不同的配置文件. $sqlname = $this->config->item('sql')['sqlname'];

//这里是自己写的一个 自定义获取数据库配置文件的函数. $this->db = _getDb($sqlname);

}

//获取前缀 public function prefix()

{

return $this->db->dbprefix;

}

//获取表 public function table($table = '')

{

if (!$table) {

$table = $this->mTable;

}

return $this->db->protect_identifiers($table, TRUE);

}

public function set_table($table)

{

$this->mTable = $table;

return $this;

}

/*** 插入数据* @param array $data 要插入的数据* @return mixed*/

public function add($data){

return $this->db->insert($this->mTable,$data);

}

}

其中, _getDb我是在 helpers 下新建了一个 common_helper.php 文件来当公共函数使用。

/*** 获取自定义数据库配置文件* @param string $group database.php的key名* @return mixed*/

function _getDb($group = 'aliyun_procurement')

{

static $db = array();

if (!isset($db[$group])) {

$CI =& get_instance();

$db[$group] = $CI->load->database($group, TRUE);

$db_name = 'ist_' . $group;

$CI->$db_name = $db[$group];

}

return $db[$group];

}

代码工作就到这为止,就结束了.

具体使用的话,就只需要在 model目录下,新建 xxx_model.php 文件, 比如 stock 表内容如下:

/*** Created by PhpStorm.* User: shwy* Date: 2017/5/16* Time: 15:47*/

class Stock_model extends Base_Model {

//这里的 stock 就是数据库的名字 protected $mTable = 'stock';

}

Controller 中使用就直接使用

class Stock extends MY_Controller

{

public function __construct()

{

parent::__construct();

$this->load->model('stock_model');

}

public function add(){

$this->stock_model->数据库方法();

}

}

以下:是我个人的见解和想法,如有指教欢迎评论指出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值