Skip to main content

Codeigniter – Conectar con distintas bases de datos

En codeigniter, a veces es necesario conectarse a distintas base de datos y con distintas credenciales de acceso, pero con las mismas características internas a las cuales se desea tener acceso. En este post se presentará una forma fácil de implementar dicha funcionalidad.

Contenido:

  1. Configuración de conexiones a base de datos – Database Configuration
  2. Configuración de Modelo – Model
  3. Configuración de Controlador – Controller

1. Configuración de conexiones a base de datos – Database Configuration

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’] hacer 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. Configuración de Modelo – Model

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: 
}

3. Configuración de Controlador – Controller

Finalmente en el controlador se implementa un función similar a la del modelo.

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);
    }
}

Deja un comentario

A %d blogueros les gusta esto: