lunes, 15 de julio de 2013

Múltiples conexiones a bases de datos en cakephp

En esta ocasión me encuentro trabajando con un proyecto sobre Mysql y Cakephp 2.2, la situación y complejidad del proyecto se ha visto en la necesidad de consultar información de otro sistema que se utiliza en la organización, el cual tiene su base de datos en Sql Server 2008. La idea es poder interactuar con los 2 Sistemas Gestores de Bases de Datos, compartiendo  la información y centralizarla en un solo lugar.
Gracias a este post que encontré navegando en la web se puede observar la flexibilidad que tiene  Cakephp, el cual menciona lo siguiente:
En cakephp existen gran cantidad de posibilidades desconocidas que, en algunos casos, pueden resultar útiles.
Una de ellas es la posibilidad de declarar más de una conexión a base de datos, pudiendo elegir en cada momento cuál de ellas deseamos utilizar.

Puede resultar muy cómodo para organizar nuestros proyectos, para acceder a diferentes servidores de bases de datos o acceder a diferentes gestores de bases de datos.
El proceso es sencillo, en primer lugar añadiremos al archivo database.php situado en /app/config/ una nueva configuración de base de datos.

Podremos copiar la configuración por defecto, llamada default, y cambiarle el nombre.
El fichero database.php quedará así

class DATABASE_CONFIG {

        public $default = array(
                'driver' => 'mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user',
                'password' => 'password',
                'database' => 'database',
                'prefix' => '',
        );

        public $nueva_conexion = array(
                'driver' => 'mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user',
                'password' => 'password',
                'database' => 'database_2',
                'prefix' => '',
        );

        public $test = array(
                'driver' => 'mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user',
                'password' => 'password',
                'database' => 'test_database_name',
                'prefix' => '',
        );
}

Con esto habremos declarado otra conexión a la base de datos llamada nueva_conexion
Una de las opciones que tiene la configuración de la base de datos, es la de utilizar un prefijo, es decir, que todas las tablas de la configuración de la base de datos comiencen con una palabra, también puede ser utilizado para organizar las bases de datos.

Para utilizar la configuración de la base de datos que hemos creado, tendremos que añadir en el modelo desde donde queremos acceder a esas tablas la siguiente línea:
  public $useDbConfig ='nueva_conexion';

A partir de este momento, cada vez que accedamos a este modelo, cakephp utilizará las tablas existentes en la base de datos de esa conexión.

ShareThis