Introducción a las bases de datos con el framework PHP Laravel, qué es Eloquent, motivos por los que existe y primeros pasos.
Con este artículo comenzamos a introducirnos en el mundo de las bases de datos en Laravel, componentes indispensables para cualquier aplicación web por sencilla que sea. En Laravel tenemos varios caminos válidos para trabajar con bases de datos, de más o menos alto nivel, para cubrir todas las necesidades de proyectos, situaciones o perfiles de desarrolladores.
A lo largo de este manual podremos aprender a trabajar con bases de datos, aunque el tema es amplio como para poderlo ver todo de golpe. De momento, los objetivos que nos planteamos en este artículo son dos:
- Proporcionar una vista de pájaro sobre las vías herramientas y existentes para trabajar con base de datos, sin abordar detalladamente ninguna de ellas.
- Que el estudiante sepa ubicar perfectamente cada una de las piezas de software con las que se va a trabajar en el acceso a bases de datos.
El motivo de comenzar ahora las bases de datos es nuestra preocupación por hacer ejemplos más interesantes, en los que podamos practicar en condiciones similares a las que encontrarás en un proyecto real. Debido que cualquier proyecto en el mundo de las aplicaciones web pasa por usar alguna base de datos, preferimos introducirnos ahora este asunto.
Cómo se gestiona el trabajo con bases de datos en Laravel
En Laravel existen diversas vías para trabajar con bases de datos, a distintos niveles. Principalmente podremos trabajar con:
- Raw SQL: consultas nativas de nuestro sistema gestor de bases de datos.
- Fluent Query Builder: un sistema de construcción de las consultas por medio de código, independiente del sistema gestor de bases de datos usado, y sin tener que escribir a mano el código SQL.
- Eloquent ORM: un ORM avanzado, pero sencillo de usar, para trabajar con los datos como si fueran objetos y abstraernos de que realmente estén almacenados en tablas de la base de datos.
El desarrollador es el responsable de saber de qué manera le interesa trabajar para cumplir mejor sus objetivos. Generalmente, en la mayor parte de los casos, trabajar con Eloquent será más sencillo, por lo que habitualmente será la solución preferida. Sin embargo, las necesidades de nuestro proyecto, ya sea por complejidad del modelo de negocio o por buscar una mejora del rendimiento, podremos preferir opciones de más bajo nivel como Query Builder o incluso Raw SQL.
Bases de datos compatibles
Laravel trabaja con diversos motores de base de datos por debajo. Son los siguientes:
- MySQL
- Postgres
- SQLite
- SQL Server
La elección del sistema de base de datos corre por nuestra cuenta y aunque sean motores diferentes, a la hora de la práctica el tratamiento que haremos, a nivel de código, para trabajar con cualquiera de ellos será el mismo, si trabajamos en las capas de más alto nivel como el query builder o el ORM.
Configuración de la base de datos
El primer paso que tendremos que hacer para trabajar con una base de datos es configurarla en nuestro sistema. Esto se realiza desde un par de lugares.
Archivo .env:
Este archivo se encuentra en la carpeta raíz del proyecto y contiene información sobre el entorno. Son básicamente una serie de variables de entorno que tienen entre otras información sobre la base de datos. Este archivo de entorno podrá en un mismo proyecto tener valores distintos, en distintas máquinas, por ejemplo cuando está en un servidor en producción y uno en desarrollo.
Archivo config/database.php:
Es un archivo donde se definen los valores de conexión de la base de datos. Muchos de ellos los toma directamente de las definiciones del archivo .env (el entorno), pero además se definen asuntos como el driver, codificación, etc. Si tuviéramos varias conexiones con base de datos deberíamos definirlas todas en este archivo.
Los valores de conexión con MySQL predeterminados que tenemos en Homestead son los siguientes:
- Host: localhost
- Usuario: homestead
- Clave: secret
- Base de datos: homestead
Aunque esta información la puedes ver y confirmar en el archivo .env de la carpeta raíz de tu instalación de Laravel.
Modelos en Laravel
Los modelos son las clases que tienen el código donde se realizará el acceso a los datos, por tanto, los accesos a las bases de datos son responsabilidad de los modelos. En Laravel se han diseñado para que funcionen con muy poco código y para ello el programador debe respetar una serie de convenciones.
Esas convenciones son las que permiten que podamos ahorrar código. Si no las respetamos simplemente nos veríamos obligados a escribir algo de código para adaptar los modelos a nuestras circunstancias. Estas reglas son importantes para comenzar:
- El nombre del modelo tiene que ser en singular y mayúscula y la tabla a la que acceden estará en plural y minúscula. Por ejemplo: modelo "User" para tabla "users". Modelo "Product" para tabla "products".
- Por defecto busca siempre la llave primaria con el nombre de campo "id".
- Eloquent usa las columnas created_at y updated_at para actualizar automáticamente esos valores de tiempo.
Migraciones y seeders
Otra cosa a la que tendremos que adaptarnos cuando trabajamos con Laravel, y que a corto y largo plazo nos ahorrará muchas tareas de mantenimiento cuando trabajemos con bases de datos, son las migraciones. En Laravel no defines tú las tablas directamente con SQL o un programa tipo PhpMyAdmin o MySQ Workbench. En lugar de ello se crean unos archivos con código de clases llamados migraciones.
Con las migraciones puedes definir la creación de tablas, su modificación, etc., llevando un registro de cada uno de los cambios que se han producido en el esquema de la base de datos. Con los seeders puedes incluso crear datos de prueba para poder poblar las tablas. Quizás podría ser más rápido aplicar todos esos cambios con un programa de acceso a las bases de datos, sin embargo la potencia de las migraciones las hacen especialmente útiles en varias situaciones:
- Cualquiera puede actualizar la forma de la base de datos o los datos en sí y compartir los archivos de migraciones con el resto del equipo, de modo que todos se puedan sincronizar y tener la misma versión de la base de datos.
- Cualquier migración se puede volver para atrás, de modo que nos sirven como una especie de control de versiones de la forma o definición de nuestra base de datos.
- Realiza una abstracción de la base de datos en cuanto a la creación y modificación de su forma. De modo que, si se cambia el motor, las migraciones crearían la misma base de datos en el nuevo sistema gestor.
- Facilita mucho la implantación de un sitio web en un nuevo servidor o en un nuevo componente del equipo de trabajo.
Sobre todo es clave el tema de la sincronización con todos los componentes de un equipo de trabajo. Si alguien cambia una tabla no necesita pasar el create table nuevo y asegurarse que todos los componentes lo apliquen a mano. Será solo dejar el archivo de las migraciones en el sistema de control de versiones usado para el proyecto (git o el que sea), todos los desarrolladores se sincronizan y ejecutan un comando para procesar las migraciones. Sin embargo, aunque trabajemos solos, las migraciones también nos ayudarán a ser más productivos.
En el próximo artículo comenzaremos a explorar a fondo las bases de datos en Laravel analizando con detalle el tema de las migraciones.
Conectar con un software profesional de administración de bases de datos
Hemos dicho que la definición de las tablas la realizaremos por medio del sistema de migraciones. También la carga de datos de prueba, sin embargo, es útil que durante el desarrollo podamos comprobar en las tablas si las operaciones que se realizan mediante la aplicación han tenido los cambios esperados. Por ello seguimos necesitando algún software para el acceso a la base de datos a bajo nivel.
Puedes acceder de varias formas, pero lo ideal es que vayas familiarizándote con algún software profesional de administración de bases de datos, como Sequel Pro, MySQL Workbench, etc.
El mecanismo para conectar será diferente dependiendo del programa. Por ejemplo en Sequel Pro haríamos lo siguiente. "File / New Connection Window" y luego en la ventana de conexión usamos los valores:
- Name: Homestead (o lo que queramos)
- Host: 127.0.0.1 (Ojo en este punto, porque la IP de nuestro homestead es 192.168.10.10, o aquella que hayamos asignado a la máquina virtual Homestead. En mi caso he conseguido conectar por esta IP en algunas ocasiones, pero no siempre. Con la IP de localhost 127.0.0.1 consigues conectar también, solo ten cuidado no estés conectando a una instalación que tengas en local de MySQL, si es que lo tienes instalado.)
- Username: homestead
- Password: secret
- Port: 33060
Opcionalmente podemos indicar ya la base de datos que ha sido creada, llamada "homestead". Luego pulsamos el botón de "Connect". Además puedes guardar esa conexión para no tener que escribir los datos más adelante con el botón "Add to Favorites".
Los usuarios de Windows pueden optar por MySQL Workbench que también es gratuito, es multiplataforma y su acceso es bastante similar. Los datos de conexión son los mismos y las ventajas de la aplicación para realizar el enlace con la base de datos difieren poco.
En MySQL Workbench hacemos una nueva conexión desde la pestaña "Home" (con una casita en la parte de arriba y a la izquierda), luego pulsando el botón "+" al lado de "Connections". Nos aparece una ventana donde configuramos la conexión.
Connection name será lo que deseemos. El connection method será "Standard (TCP/IP)" y luego los parámetros de conexión los ya conocidos, 127.0.0.1 (o quizás 192.168.10.10 si es tu caso) para el "Hostname", homestead para "Username" y listo.
Si no ponemos la clave en la primera ventana de conexión nos aparecerá una nueva ventana más tarde para indicarla.
Como decimos, desde estos programas en principio nos limitaremos a observar cómo han ido las migraciones al ejecutarse o volverse hacia atrás, así como la intervención de los modelos para modificar los datos de la aplicación. No obstante, si lo preferimos, podríamos usar también estos programas para definir las bases de datos, en cuyo caso perderíamos las ventajas de trabajar con el sistema de migraciones.
En el siguiente artículo entraremos de lleno en la parte práctica y conoceremos el sistema de migraciones para poder comenzar a crear las nuestras.
Carlos Ruiz Ruso
Consultor tecnológico para el desarrollo de proyectos online especializado en Wo...