Saltar al contenido

Nota: Este artículo aplica a Laravel 11 y Laravel 12, con ejemplos actualizados a las mejores prácticas modernas del framework.

En Laravel, los modelos son clases que representan a las tablas en la base de datos. Se utilizan para interactuar con la base de datos y realizar operaciones como insertar, actualizar y eliminar datos. Los modelos se almacenan en la carpeta "app\Models" y se pueden crear utilizando el comando php artisan make:model <model>. También se pueden definir relaciones entre modelos, como uno a uno, uno a muchos, muchos a muchos y polimórficas.

Eloquent, el ORM para los modelos Laravel

Eloquent es el ORM (Object-Relational Mapping) incluido en Laravel. Es una forma de interactuar con la base de datos utilizando modelos en lugar de escribir consultas SQL. Cada modelo en Laravel se asocia con una tabla en la base de datos y se pueden utilizar para realizar operaciones CRUD (crear, leer, actualizar y eliminar) en esa tabla.

Curso desde 0 de Eloquent ORM

Eloquent proporciona una serie de características útiles, como el manejo automático de las claves primarias, la posibilidad de definir relaciones entre modelos, y la capacidad de crear consultas avanzadas mediante el uso de métodos de consulta.

Para utilizar Eloquent en un modelo, se debe extender la clase base Eloquent. Por ejemplo, para crear un modelo llamado "Product" que representa una tabla de productos en la base de datos, se puede crear un archivo llamado "Product.php" en la carpeta "app\Models" y escribir lo siguiente:

También se pueden especificar algunas de las características que va a utilizar este modelo, por ejemplo, si el nombre de la tabla de nuestro modelo Product es diferente a products (Eloquent busca el plural en minúsculas del model), se puede especificar utilizando la propiedad protected $table de la siguiente forma:

Atributos en los modelos Laravel

Cada modelo en Laravel, al extender de la clase base "Illuminate\Database\Eloquent\Model", tiene acceso a una serie de atributos y métodos que le permiten interactuar con la tabla correspondiente en la base de datos.

Algunos de los atributos más comunes en un modelo Eloquent incluyen:

  • $table: Especifica el nombre de la tabla en la base de datos a la que el modelo está conectado.

  • $primaryKey: Especifica el nombre de la columna que contiene la clave primaria de la tabla.

  • $fillable: Especifica qué campos del modelo se pueden rellenar mediante asignación masiva (mass assignment).

  • $guarded: Especifica qué campos del modelo no se pueden rellenar mediante asignación masiva.

  • $hidden: Especifica qué campos del modelo deben ocultarse al mostrar el modelo como un objeto JSON o un array.

  • $visible: Alternativa a $hidden, especifica qué campos SÍ deben mostrarse.

  • $connection: Especifica la conexión a la base de datos que se debe utilizar para interactuar con la tabla del modelo.

  • $timestamps: Especifica si el modelo debe tener automáticamente campos "created_at" y "updated_at" actualizados en la base de datos.

  • $perPage: Especifica cuantos elementos se deben mostrar en una paginación.

  • $incrementing: Especifica si la clave primaria del modelo es un valor incremental o no. Por defecto es true, pero si se usa una clave primaria que no es incremental (como UUID) se debe colocar en false.

  • $with: Especifica las relaciones que se deben cargar automáticamente cuando se recupera un modelo (eager loading).

  • $withCount: Especifica las relaciones que se deben contar automáticamente cuando se recupera un modelo.

  • $appends: Especifica los campos virtuales (accessors) que se deben agregar al modelo cuando se convierte en un array o JSON.

  • $touches: Especifica las relaciones que deben ser tocadas (touch) cuando se guarda o se actualiza un modelo.

  • $observables: Especifica eventos personalizados que se deben disparar en el modelo.

  • $dispatchesEvents: Mapea eventos del modelo a clases de eventos personalizadas.

Es importante tener en cuenta que estos atributos son opcionales y no es necesario definirlos para todos los modelos, dependerá del caso de uso. El uso de estos atributos puede ayudar a asegurar la integridad de los datos y mejorar la seguridad y la eficiencia de la aplicación.

Casts en Laravel 11/12

En Laravel 11 y posteriores, se recomienda definir los casts utilizando el método casts() en lugar de la propiedad $casts. Esto permite mayor flexibilidad y tipado:

Los casts disponibles incluyen: array, boolean, collection, date, datetime, decimal, encrypted, hashed, integer, float, string, timestamp, entre otros.

Accessors y Mutators Modernos

Laravel 11/12 utiliza la clase Attribute para definir accessors y mutators de forma más elegante:

Métodos en los modelos Laravel

Los modelos en Laravel también proporcionan una serie de métodos que se pueden utilizar para interactuar con la base de datos. Algunos de los métodos más utilizados de los modelos Laravel son los siguientes:

  • create(): Crea un nuevo registro en la tabla correspondiente al modelo.

  • save(): Guarda o actualiza un registro existente en la tabla correspondiente al modelo.

  • update(): Actualiza un registro existente en la tabla correspondiente al modelo.

  • delete(): Elimina un registro existente en la tabla correspondiente al modelo.

  • all(): Recupera todos los registros de la tabla correspondiente al modelo.

  • find(): Recupera un registro específico de la tabla correspondiente al modelo utilizando su clave primaria.

  • findOrFail(): Como find(), pero lanza una excepción si no encuentra el registro.

  • first(): Recupera el primer registro de la tabla correspondiente al modelo.

  • firstOrFail(): Como first(), pero lanza una excepción si no encuentra registros.

  • where(): Agrega una condición a la consulta para recuperar registros de la tabla correspondiente al modelo.

  • with(): Carga las relaciones especificadas junto con el modelo recuperado (eager loading).

  • withCount(): Carga el conteo de relaciones sin cargar los modelos completos.

Estos son solo algunos ejemplos de los métodos que proporciona Eloquent, hay muchos otros métodos útiles para realizar diferentes operaciones en la base de datos, como por ejemplo:

  • firstOrCreate(), firstOrNew(), updateOrCreate(): Métodos para encontrar o crear registros.

  • findMany(): Busca múltiples registros por sus IDs.

  • count(), max(), min(), sum(), avg(): Métodos de agregación.

  • has(), doesntHave(): Filtra por existencia de relaciones.

  • whereHas(): Filtra por condiciones en relaciones.

  • latest(), oldest(): Ordena por timestamps.

  • paginate(), simplePaginate(): Paginación de resultados.

Es importante tener en cuenta que estos métodos son solo una parte de lo que Eloquent ofrece, y que se pueden utilizar en conjunto con otros métodos y atributos para construir consultas complejas. Es importante entender cómo funcionan estos métodos y cómo utilizarlos correctamente para asegurar la integridad de los datos y mejorar la eficiencia de la aplicación.

Trucos y recetas en Laravel Eloquent

Model Factories en Laravel

Las factories son una característica esencial en Laravel para generar datos de prueba. Al crear un modelo con php artisan make:model Product -mf, Laravel genera automáticamente una factory asociada:

Las factories son invaluables para testing y seeders, permitiendo crear datos realistas fácilmente:

Uso de modelos en Laravel

Aquí hay un ejemplo de cómo se podría utilizar un modelo en Laravel para interactuar con una tabla de "productos" en la base de datos:

  1. Utilizar el modelo en un controlador para crear un nuevo registro en la tabla "products".

  2. Utilizar el modelo en una vista para mostrar todos los productos.

Este es solo un ejemplo básico de cómo se pueden utilizar los modelos en Laravel para interactuar con la base de datos. Se pueden utilizar métodos y atributos de Eloquent para construir consultas más complejas y personalizadas, y se pueden utilizar en conjunto con otras funcionalidades de Laravel, como las vistas y los controladores, para construir una aplicación completa.

Resumen

Los modelos Eloquent son el corazón de Laravel para interactuar con la base de datos. Con Laravel 11 y 12, las mejores prácticas incluyen:

  • Usar el método casts() en lugar de la propiedad $casts

  • Definir accessors/mutators con la clase Attribute

  • Crear factories junto con tus modelos para testing

  • Utilizar eager loading con with() para evitar el problema N+1

  • Aprovechar métodos como firstOrCreate() y updateOrCreate() para lógica común


Hasta aquí esta entrada acerca de los modelos en Laravel, espero que te haya gustado y que ahora tengas una idea clara de para qué sirven y cómo utilizarlos en versiones modernas del framework.

En la plataforma tenemos decenas de cursos de Laravel para seguir aprendiendo todo lo que necesitas para trabajar de forma profesional con este framework PHP.

school Curso completo

Curso Laravel 12
Completo 2026

El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.

access_time 8 horas de contenido
layers 4 tecnologías en 1
update 100% actualizado
code Proyectos prácticos
Ver Curso Laravel 12 arrow_forward

star Incluido en cualquier suscripción

Rutas de aprendizaje