Me tope con el requerimiento de utilizar 2 base de datos en distintos servidores para mostrar información en unos mantenimientos y resulto facil esta mision aun que me tuvo un rato buscando la solucion pero aqui les detallo como solucionamos este problema.
nos vamos a
- \application\config\database.php
ejemplo:
el nuevo que agrego
$db['MI_BASE_DE_DATOS'] |
el que esta por defecto
$db['default'] |
le damos los datos de conexion.
/*esta esta en otro servidor entonces debemos colocar la ip*/ $db['Billing']['hostname'] = 'xxxxxxxxxxx'; $db['Billing']['username'] = 'xxxxxxx'; $db['Billing']['password'] = xxxxxxxxxxx'; $db['Billing']['database'] = 'billing'; $db['Billing']['dbdriver'] = 'mysqli'; $db['default']['port'] = "3306"; $db['Billing']['dbprefix'] = ''; $db['Billing']['pconnect'] = TRUE; $db['Billing']['db_debug'] = TRUE; $db['Billing']['cache_on'] = FALSE; $db['Billing']['cachedir'] = ''; $db['Billing']['char_set'] = 'utf8'; $db['Billing']['dbcollat'] = 'utf8_general_ci'; $db['Billing']['swap_pre'] = ''; $active_group = 'default'; $active_record = TRUE; /*esta es la que tenemos en nuestro servidor*/ $db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'xxxx'; $db['default']['password'] = 'xxxxxxxx'; $db['default']['database'] = 'xxxxxxxxx'; $db['default']['dbdriver'] = 'mysqli'; $db['default']['port'] = "3306"; $db['default']['dbprefix'] = ''; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; $db['default']['swap_pre'] = ''; |
ahora desde un modelo o control podemos activar la conexion a la base de datos por que en codeignter solo tiene una que es la que colocamos pro defecto.
con esta linea de codigo lo activamos
$this->load->database("Billing",TRUE); |
aqui un ejemplo de la conexion desde el modelo
class Cuentas_model extends CI_Model { function __construct() { parent::__construct(); } function get_accounts() { /*la conexion a la otra base de datos*/ $db_billing = $this->load->database("Billing",TRUE); /*una consulta a esa base de datos*/ $query=$db_billing->query("select * from accounts"); return $query->result(); } } |
en el controlador
class Cuentas extends CI_Controller { public function __construct(){ parent::__construct(); $this->template->set_layout('layout.php'); $this->load->model("Cuentas_model","Cuentas"); } public function index() { $this->template->title('Cuentas'); /*llamamos al modelo y jalamos los datos*/ $data["listado"]=$this->Cuentas->get_accounts(); $this->template->build('distribuidores/cuentas/index',$data); } } |
en la vista
foreach ($listado as $item): echo $item->accountcode."<br />"; endforeach; |
con esto ya estamos manejando 2 base de datos y si quieren con mas base de datos los mismos pasos pero agregan en el array de base de datos.