在CodeIgniter 3中能否使用hooks(钩子)连接两个数据库?
CodeIgniter 3 基于钩子实现双数据库连接方案
CodeIgniter 3 完全可以通过钩子实现两个不同数据库的连接,无需修改框架核心,也不需要在每个控制器中重复编写数据库加载逻辑,具体实现步骤如下:
1. 配置多数据库连接参数
先在数据库配置文件中添加两组数据库的连接信息:
// application/config/database.php // 默认数据库配置 $db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => '你的默认库用户名', 'password' => '你的默认库密码', 'database' => '第一个数据库名', 'dbdriver' => 'mysqli', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', // 其余参数按需配置即可 ); // 第二个数据库配置 $db['second_db'] = array( 'dsn' => '', 'hostname' => '第二个数据库地址', 'username' => '第二个库用户名', 'password' => '第二个库密码', 'database' => '第二个数据库名', 'dbdriver' => 'mysqli', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', // 其余参数按需配置即可 );
2. 开启钩子功能
修改框架配置文件开启钩子:
// application/config/config.php $config['enable_hooks'] = TRUE;
3. 配置钩子规则
在钩子配置文件中注册触发时机和执行逻辑:
// application/config/hooks.php $hook['post_controller_constructor'] = [ 'class' => 'MultiDbLoader', 'function' => 'loadDatabases', 'filename' => 'MultiDbLoader.php', 'filepath' => 'hooks', ];
这里选择post_controller_constructor作为触发点,逻辑会在控制器实例化完成、方法执行前运行,保证所有控制器方法都能直接调用两个数据库实例。
4. 编写钩子实现逻辑
在hooks目录下创建钩子实现文件,加载两个数据库并赋值给CI超级实例:
// application/hooks/MultiDbLoader.php class MultiDbLoader { public function loadDatabases() { // 获取CI超级实例 $CI =& get_instance(); // 加载默认数据库,和你提供的示例代码逻辑一致 $CI->db = $CI->load->database('default', TRUE); // 加载第二个数据库,第二个参数传TRUE表示返回独立的数据库实例 $CI->second_db = $CI->load->database('second_db', TRUE); } }
5. 全局调用示例
完成上述配置后,在任意控制器、模型中都可以直接调用两个数据库实例:
// 控制器中使用示例 public function getCrossDbData() { // 从默认数据库查询数据 $defaultData = $this->db->get("default_db_table")->result_array(); // 从第二个数据库查询数据 $secondData = $this->second_db->get("second_db_table")->result_array(); // 后续业务逻辑处理 }
注意事项
- 两个数据库实例完全独立,查询构造器、事务操作不会互相干扰
- 如果不需要全局加载双数据库,也可以修改钩子逻辑做按需判断,或者直接在需要的控制器构造方法中执行上述加载逻辑
load->database的第二个参数必须传TRUE,否则第二个数据库会覆盖默认的$this->db实例
内容的提问来源于stack exchange,提问作者Jagdish Kumawat
相关产品推荐
相关产品推荐

