· Miler Roque · Codeigniter · 3 min lectura
CodeIgniter, establecer conexiones con diversas bases de datos
Conectarse a múltiples bases de datos con diferentes credenciales pero características similares en CodeIgniter.
En CodeIgniter, a veces es necesario conectarse a distintas bases de datos utilizando diferentes credenciales de acceso, pero con las mismas características internas. En este post, se presentará una forma sencilla de implementar esta funcionalidad.
Contenido:
- Database Configuration - Configuración de conexiones a base de datos
- Model - Configuración de Modelo
- Controller - Configuración de Controlador
1. Database Configuration - Configuración de conexiones a base de datos
Lo primero que se configurará será las distintas conexiones a base de datos, para el ejemplo se simularán tres: bd_principal, bd_secundaria , bd_otra.
//application/config/database.php
//===============================
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'bd_principal',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
$db['secundaria'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'bd_secundaria',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
$db['otra'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'bd_otra',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
$db[‘default’] hace referencia a la conexión por defecto, $db[‘secundaria’] y $db[‘otra’] serán a la que se cambiarán bajo ciertas condiciones. Para más información puede consultar en: https://www.codeigniter.com/user_guide/database/configuration.html
2. Model - Configuración de Modelo
Se crea “UsuarioModel”, dónde se implementa la función “init” y como parámetro la variable “$basedatos”, cuyos valores pueden ser: “secundaria” u “otra”, es decir, los nombres de las conexiones que no son por defecto.
//Models/UsuarioModelo.php
//========================
class UsuarioModel extends CI_Model {
public function init($basedatos)
{
$this->db = $this->load->database($basedatos, TRUE);
}
public function data_retorno(){
$query = $this->db->get('usuario_log');
return $query->result();
}
//Otras funciones:
//...
}
Controller - Configuración de Controlador
//controllers/Usuario.php
//=======================
<?php
class Usuario extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model('UsuarioModel','modelo'); //modelo es el alias
}
private function init($basedatos){
$this->modelo->init($basedatos); //modelo es el alias
}
public function index(){
//Cargar vista
}
public function obtener_datos(){
//nombre_conexion lo puede obtener de un formulario o de la sesión del usuario
$conexion = $this->input->post('nombre_conexion');
$this->init($conexion); //Conecta
$data_retorno = $this->modelo->data_retorno(); //modelo es el alias
header('Content-Type: application/json');
echo json_encode($data_retorno);
}
}