Laravel 6

Laravel incluye un ORM llamado Eloquent, el cual nos permite abstraer aún más las operaciones de base de datos, puesto que podemos interactuar con «Modelos» (representados por clases y objetos de PHP) en vez de tener que escribir sentencias SQL manualmente. En esta lección generaremos nuestro primer modelo de Eloquent y veremos cómo podemos crear y obtener registros usando este ORM.

Esta lección incluye un video premium

Regístrate para ver este video y cientos de lecciones exclusivas.

Mira el código en GitHub: actual, resultado, comparación.

Comencemos generando un modelo con el comando:

Por defecto Laravel genera esta clase en el directorio app/ de nuestra aplicación. También podríamos ubicar los modelos dentro de un subdirectorio como app/Models por ejemplo:

Pero utilicemos el modelo que se creó en el directorio app/ y eliminemos el otro para evitar confusión.

Crear registros utilizando Eloquent ORM

Regresemos a database/seeds/NoteSeeder.php, reemplacemos los llamado a:

Por:

Alternativamente podemos importar la clase al principio del archivo:

Para luego poder utilizarla sin necesidad de hacer referencia a su nombre de espacio completo:

Al ejecutar php artisan migrate:fresh --seed y revisar la base de datos, podremos comprobar que hemos obtenido el mismo resultado que antes.

Laravel provee un mecanismo de protección ante asignación masiva, es decir, asignación de múltiples atributos por medio de un arreglo; sin embargo, esta protección está desactivada dentro de los seeders y la veremos luego, cuando trabajemos en el formulario para crear notas.

Obtener registros utilizando Eloquent ORM

De vuelta a routes/web.php podemos obtener las notas de una forma aún más simple:

Convenciones de nombres de modelos y tablas

Eloquent utiliza una serie de convenciones para ahorrarnos el esfuerzo de tener que especificar cada nombre de tabla, llaves primarias o foráneas, etc.

La convención para el nombre del modelo es que cada palabra comience con una letra mayúscula y el nombre del modelo esté en singular, por ejemplo «Note» o «NoteCategory».

La convención para los nombres de las tablas es colocarlas en plural, todo en minúsculas y cada palabra dividida por un guión bajo, por ejemplo «notes» o «note_categories». (Nota que en inglés solo se pluraliza la última palabra).

Por supuesto si tus tablas y/o modelos no siguen estas convenciones, puedes definir el nombre de la tabla manualmente desde el modelo:

Eloquent y el constructor de consultas

Una ventaja adicional del ORM Eloquent es que -partiendo de cualquier modelo- podemos comenzar a construir consultas como aprendimos en la lección anterior, por ejemplo:

El resultado será similar en ambos casos, sin embargo, al trabajar con un modelo, los objetos retornados serán instancias de dicho modelo en vez de instancias de la clase genérica de PHP. Podemos comprobar esto utilizando Tinker.

Utilizando Tinker, la consola interactiva de Laravel

Vamos a conectarnos a Tinker ejecutando el siguiente comando desde el directorio principal del proyecto:

Ahora estamos dentro de la consola interactiva, podemos salir con exit y volver a entrar con php artisan tinker, de hecho, esto es necesario si hacemos cambios en el código y queremos probarlos.

Desde aquí vamos a obtener registros usando el constructor de consultas y Eloquent como ya hemos aprendido:

De esta manera comprobamos que con Eloquent obtenemos un modelo, no un objeto genérico, y esto trae muchos beneficios como veremos a partir de la lección siguiente.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Obtener registros de la base de datos con Laravel Lección siguiente Creación de registros con Laravel 6