Optimización de consultas SQL

En esta lección prepararemos un sencillo listado de productos con categoría utilizando Laravel y los diferentes componentes que provee el ORM Eloquent (modelos, migraciones, model factories y seeders).

Crear un nuevo proyecto con Laravel 6

Vamos a crear un nuevo proyecto de Laravel. Yo utilizaré la versión 6, pero los conocimientos de este tip están disponibles desde la versión 5.3 en adelante:

Generar modelos, factories y seeders con Laravel

Ahora vamos al directorio del proyecto y generemos 2 modelos con sus migraciones, model factories y seeders:

Modificando las migraciones

En la migración de ProductCategory vamos a agregar algunas columnas, las esenciales son title y slug, pero supongamos que requerimos de otras 5 columnas:

La migración de la tabla de productos será similar, aunque vamos a incluir un campo para imágenes y también debemos incluir un campo para el ID de la categoría:

Modificando los Model Factories

Usemos Faker para generar datos aleatorios para ambos modelos:

Primero en database/factories/ProductCategoryFactory.php:

Luego en database/factories/ProductFactory.php, el proceso es similar en ambos factories:

Modificando los Seeders

A continuación, modifiquemos los seeders para generar 50 categorías y alrededor de 1000 productos asociados a dichas categorías:

No olvides agregar el llamado a los seeders dentro de DatabaseSeeder:

Debes cargar los datos en el orden correcto, por ejemplo, los productos dependen de la categoría del producto, por lo tanto, cargamos las categorías de producto primero y luego los productos.

Crear tablas con datos en Laravel

Para ejecutar las migraciones y los seeders primero debemos configurar la base de datos, como vimos en la lección Creación de tablas con el sistema de migraciones en Laravel 6, simplemente edita el archivo .env y modifica las siguientes llaves con los valores que correspondan a tu entorno:

Relacionar productos y categorías con Eloquent

Antes de crear el listado, vamos a indicar que un producto pertenece a una categoría, dentro del modelo de productos en app/Product.php:

Además, indicaremos que cada categoría puede tener muchos productos en app/ProductCategory.php:

Generar un listado de productos con Laravel

A continuación, vamos a generar un listado de productos utilizando una ruta y una vista. Primero declaremos la ruta en routes/web.php:

Luego creemos una plantilla de Blade en resources/views/products.blade.php con el siguiente código:

Agregando estilos CSS a una aplicación de Laravel

Si quieres ver el listado con estilos de CSS e imágenes puedes descargar los siguientes archivos:

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

La plantilla de productos es muy similar a la presentada arriba (salvo por los cambios al HTML), el único cambio con Blade es la inclusión de la imagen:

Nota que en la base de datos guardamos solo el nombre de la imagen y en el sistema de archivos guardamos la imagen como tal (en un proyecto real típicamente irían en el directorio storage/app/public, yo las he colocado en public/img/products).

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

Lección siguiente Tip de optimización con Eloquent #1: Verifica las consultas ejecutadas