Modelos dinámicos en CakePHP

Últimamente estoy experimentando mucho con CakePHP y una de las cosas que he necesitado es crear unos modelos en los que pudiera cambiar en tiempo de ejecución la base de datos con la que están enlazados.

Básicamente estoy construyendo un portal en el que se aglutinan una serie de utilidades, y alguna de estas utilidades atacan a otras bases de datos independientes de portal.

Lo que se me ha ocurrido es crear en la base de datos del portal una tabla en la que almaceno la configuración de las bases de datos a las que quiero acceder (algunas de ellas comparten modelo). De esta manera puedo crear de manera dinámica las conexiones necesarias y enlazarlas con los modelos que necesite en ese momento.

La tabla es la siguiente:

Y este sería uno de los modelos:

El ejemplo tiene también un enlace con otra tabla, en este caso llamada “dos”. En la documentación del CakePHP se explica que foreingKey es el campo de la tabla “uno” que realiza en enlace, y el associationForeignKey es el campo de la tabla “dos”. Para definir las propiedades relativas a la tabla “dos”, como el origen de datos (useDbConfig) lo hacemos en el constructor.

Y así es cómo lo utilizo:

El ejemplo hace una cosa un poco extraña
$database['Database'] = ...
esto es porque al ser un ejemplo he simplificado el esquema real de trabajo ya que tengo una tabla donde guardo los sistemas a los que voy a acceder y que está enlazada con la tabla databases que es donde se guardan las conexiones de las bases de datos… pero creo que se entiende.

Share Button

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *