· 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.

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:

  1. Database Configuration - Configuración de conexiones a base de datos
  2. Model - Configuración de Modelo
  3. 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);
    }
}
Compartir:
Volver al blog

Posts relacionados

Ver todos »