Mi Primera App con Coldbox - 3
De nuestra exploración pasada quedo pendiente describir la integración con base de datos. por la que Coldfusion siempre se ha caracterizado desde que empezó con su sintaxis DBML.
Honestamente pensé sería tan fácil como decirte, 1) registra el datasource en el Application, 2) ejecuta tus Cfquery's y 3) listo. Aunque de hecho, puede ser así, esta no es la mejor práctica. Sobre todo si se trabaja con equipos y se requiere hacer deployments diversos o si las tablas/datos de pruebas cambian seguido.
Coldbox permite implementar los métodos necesarios para ejecutar el denominado "migration" (up & down). Esto no es otra cosa más que scripts para crear y borrar las tablas, así como un gestor para identificar el estado de nuestra versión y garantizar con ello estemos en la más reciente y no en conflicto con otros.
Aprovechando que esto es nuevo para mi, de una vez decidí dar el salto y hacer esto con mySQL (porqué es gratuito y puedo instalar el servidor en mi Mac) - o como diria mi hija, "porque quiero, porque puedo y porque no le tengo miedo!".
Además, una de las promesas de Coldbox es que puede identificar la "gramática" de la base da datos e implementar una sintaxis "QB" para simplicar los comandos y hacer los queries más globales para cualquier motor de base de datos así como una capacidad nativa de ORM/Hibernate para "mapear" la base como si fuese objeto y asi tener actualizaciones en tiempo real.
Aunque no veremos más que el SQL tradicional en este ejercicio, no está de más sugerirles que exploren esos dos conceptos (Query Builder y ORM/Hibernate) para conocer más formas de integración con bases de datos y aprovechar todo lo que ofrece el framework de Coldbox y Coldfusion.
¿Qué se requiere para poder usar entonces las bases de datos con Coldbox? - Exactamente lo mismo de siempre, un "connection string" que se actualice en los archivos de configuración correspondientes y también, de forma muy recomendada este concepto de "migrate" para administrar las altas y bajas de tablas que en desarrollo son "pan de todos los días". Veamos cómo se hace -
Antes de proceder asegúrate de tener acceso ya sea de forma local o remota a un servidor de base de datos, yo usaré mySQL local como ejemplo, pero lleva la misma lógica hacerlo para cualquier otro motor en cualquier otra ubicación. Debes contar con credenciales como nombre de la base de datos, schema, login, password, dirección IP, puerto y en función de tu motor quizá otros datos como "bundle" y "version". Por lo mismo es recomendable que lo pruebes localmente para que puedas crear lo propio.
1) Modifica las variables de entorno.
Si no tienes el archivo ".env" en la raíz entonces créalo y copia todo el contenido de ".env.example" a este archivo, debe ser algo similar a lo de abajo. Reemplaza "xxx" con los datos correspondientes para conectarte a tu base de datos.
Para probar que tus variables de entorno funcionen bien. Salva el archivo y reinicia el servidor con "server restart" o "server stop" y "server start". Al hacer "env show" debes ver tus credenciales con los valores correctos. Es importante que veas el nombre de tu aplicación y cómo son credenciales de ambiente - desarrollo. Por ejemplo así se ven las variables de env en mi app prueba de "teques".
Nota que solo las que empiezan con DB tienen relación con la base de datos, las demás son para otras funciones como almacenamiento en S3 o autenticación JWT.
Quizá el único pendiente para poder usar tu base de datos ahora es establecer el nombre del datasource en /Application.cfc (raíz) En mi caso le doy el mismo nombre. Recuerda que puedes agregar las variables de Env que quieras, esto te permitirá por ejemplo tener diferentes fuentes de datos (aunque solo una se pueda configurar como "this" en tu app).
Es buen momento, antes de hacer pruebas, que platiquemos sobre "migrate" ya que justamente con este mecanismo vamos a crear nuestra primera tabla/prueba