Laravel, a través de su ORM Eloquent, nos ofrece una forma intuitiva y potente de interactuar con nuestras tablas y registros. Uno de los temas más interesantes es la posibilidad de definir atributos que nos permitan acceder (Accessors) y mutar (Mutators) los datos de nuestros modelos de manera elegante.
A lo largo de este artículo, veremos cómo usar la sintaxis “clásica” (getFooAttribute y setFooAttribute) y la forma recomendada a partir de Laravel 8/9 en adelante, haciendo uso de:
¡Comencemos!
1. ¿Qué son los Accessors y Mutators?
Accessors: Permiten modificar o formatear el valor de una columna cuando se accede (lee) desde un modelo Eloquent.
Mutators: Permiten transformar el valor antes de almacenarlo en la base de datos.
Por ejemplo, si tienes en tu tabla de usuarios (users) las columnas first_name y last_name, puedes crear un atributo full_name que concatene estos dos valores.
2. Definición clásica de Accessors y Mutators
Antes de Laravel 8.42 (aprox.), se creaban “métodos mágicos” siguiendo la convención getNombreDelAtributoAttribute() y setNombreDelAtributoAttribute($value). Por ejemplo:
Accessors se invocan automáticamente cuando consultamos
$user->full_name.Mutators se ejecutan cuando se asigna un valor a
$user->first_name.
Esta forma sigue funcionando en versiones actuales de Laravel. Sin embargo, existe una nueva y recomendada forma de hacerlo, usando la clase Attribute.
3. Nueva forma con use Illuminate\Database\Eloquent\Casts\Attribute;
A partir de Laravel 8.42, se introdujo una sintaxis más descriptiva y “limpia”. Consiste en definir métodos protegidos (protected) que devuelvan un Attribute. Por ejemplo:
3.1. ¿Cómo funciona?
get: Se ejecuta al leer el atributo
full_name. Tiene acceso a la variable$value(que sería el valor en la base de datos si existiera) y a$attributes, que contiene todos los valores del modelo.set: Se ejecuta al asignar un valor a
full_name. Normalmente, se retorna un arreglo asociativo que indica cómo queremos mapear ese valor a las columnas reales de la tabla (first_nameylast_nameen este ejemplo).
4. Ejemplos de uso
4.1. Formateando fechas con Accessors y Mutators
Supongamos que tenemos un campo birth_date en nuestro modelo User y queremos mostrarlo en un formato más legible y guardarlo en un formato estándar (Y-m-d). Podríamos hacer:
Al leer
$user->birth_date, obtendrás algo como20/02/2024.Al asignar
$user->birth_date = '20-02-2024', se guardará en la base de datos como2024-02-20.
4.2. Encriptando un campo sensible
¿Necesitas encriptar un valor para almacenarlo seguro en la base de datos? Podríamos usar Crypt de Laravel para encriptar en el Mutator y desencriptar en el Accessor:
Así, en tu código podrías hacer:
Internamente, se guardará en la base de datos un valor encriptado.
4.3. Capitalizando valores
Algo muy común es asegurar que el primer carácter de un nombre siempre sea mayúscula al guardar en la base de datos:
En el “get” haces que siempre se muestre con la primera letra capitalizada, y en el “set” te aseguras de guardar el nombre en minúsculas.
5. ¿Cuándo conviene usarlos?
Los Accessors y Mutators son especialmente útiles en situaciones como:
Enmascarar o encriptar datos: como contraseñas, llaves secretas, tokens, etc.
Formatear valores: fecha/hora, unidades monetarias, direcciones, etc.
Evitar la repetición de lógica: por ejemplo, no repetir en cada controlador la capitalización o manipulación de nombres.
Recuerda que la sintaxis “clásica” de getFooAttribute y setFooAttribute sigue funcionando, pero la nueva forma con la clase Attribute aporta mayor claridad y un enfoque más organizado.
6. Buenas prácticas
Mantén la lógica sencilla: No sobrecargues un único Accessor/Mutator con lógica compleja. De ser necesario, refactoriza a métodos auxiliares.
Nombra los atributos de forma descriptiva: Para un mejor entendimiento del equipo y del propio modelo.
Considera los $casts nativos: Cuando solo necesitas castear valores sencillos (por ejemplo,
protected $casts = ['is_admin' => 'boolean'];), aprovecha la funcionalidad nativa de Laravel.Valida en otros lugares: Aunque los Mutators pueden usarse para “sanitizar” datos, la validación generalmente se hace en Form Requests o en la capa que maneje la lógica de negocio (Services, etc.).
7. Conclusión
Los atributos en Eloquent (Accessors y Mutators) son una poderosa herramienta que te permite personalizar cómo se leen y escriben los datos de tu aplicación, sin repetir lógica en diferentes capas. La sintaxis con use Illuminate\Database\Eloquent\Casts\Attribute; aporta claridad y es la forma recomendada en las versiones modernas de Laravel.
Referencias
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.
star Incluido en cualquier suscripción