> Manuales > Manual de Laravel

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:

  1. 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.
  2. 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.

Nota: Para los más observadores, cabe aclarar que hemos pasado por alto en el Manual de Laravel muchas secciones importantes que veremos con detalle más adelante, como los redirects, envío de email, vistas con Blade, etc. pero no hay que preocuparse porque las iremos retomando.

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:

Nota: Cuando decimos "a distintos niveles" nos referimos a lo mismo que se refieren los lenguajes de alto y bajo nivel. Los de alto nivel son más cercanos al lenguaje de las personas y los de bajo nivel más cercanos a la máquina. En este caso son distintos niveles con respecto al sistema gestor de base de datos. Raw Sql es el de más bajo nivel y Eloquent es el de más alto nivel.

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:

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.

Nota: Como te podrás imaginar, este archivo no se suele incluir en el sistema de control de versiones, porque cada máquina tendrá sus variables de entorno y no se desean compartir entre unas y otras. Por eso, cuando usas Git, lo más normal es que lo metas en el archivo "gitignore".

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.

Nota: Si has instalado Laravel mediante Homestead la inmensa mayoría de las configuraciones ya están realizadas. En los archivos .env y config/database.php no tendrás necesidad de editar nada. Si has instalado Laravel por otros medios tendrás que configurarlos a mano. No obstante, aunque Homestead te ahorre este paso, merece la pena echarle un vistazo a ambos ficheros para ver cómo y dónde se especifican todos los valores de conexión.

Los valores de conexión con MySQL predeterminados que tenemos en Homestead son los siguientes:

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:

Nota: Obviamente, hay mucha más información que tendremos que abordar sobre los modelos, que veremos más adelante. No obstante recuerda que tuvimos una introducción a los modelos en Laravel en la que ofrecimos más información y vimos algo de código.

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:

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.

Nota: Otro método sería conectar con MySQL, u otro sistema gestor de base de datos que estés usando, a través de línea de comandos. Por ejemplo, para conectar con MySQL por el terminal ya explicamos cómo hacerlo en la Introducción a los modelos de Laravel.

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:

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".

Nota: Para que la conexión funcione ten en cuenta que la máquina virtual Homestead debe estar arrancada. Osea, haber hecho el "vagrant up" desde la carpeta donde tienes el Vagrantfile.

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...

Manual