Skip to main content

Introducción

Los accesores, mutadores y casts de atributos son mecanismos que transforman los valores de los atributos de un modelo Eloquent al obtenerlos o al asignarlos desde la instancia.
  • Accesores: transforman el valor bruto que llega de la BD antes de exponerlo a la aplicación.
  • Mutadores: transforman el valor asignado por la aplicación antes de guardarlo en la BD.
  • Casts: permiten declarar la conversión de tipo del atributo sin escribir métodos adicionales.

Definir un accesor

Para definir un accesor añade al modelo un método protected. El nombre del método se escribe en camelCase y su tipo de retorno debe ser Illuminate\Database\Eloquent\Casts\Attribute.
La closure get recibe el valor bruto de la BD. Desde la instancia del modelo puedes acceder al atributo como propiedad first_name.
Si quieres que el valor calculado por el accesor se incluya en el JSON o el array del modelo, añade el atributo en snake_case a la propiedad $appends del modelo.

Crear un value object a partir de varios atributos

La closure get recibe como segundo argumento $attributes (todos los atributos del modelo). Así puedes combinar varias columnas y devolver un value object.

Caché del accesor

Los accesores que devuelven un value object devuelven automáticamente la misma instancia gracias a la caché de Eloquent. Para cachear también valores primitivos (cadenas, números) llama a shouldCache().
Para desactivar la caché de objetos utiliza withoutObjectCaching().

Definir un mutador

El mutador se define en el argumento set de Attribute::make(). Puedes combinarlo con el accesor en el mismo método.
Cuando asignes un valor al modelo se ejecutará la closure set.

Escribir en varios atributos

Si la closure set devuelve un array puedes actualizar varias columnas de golpe.

Casts de atributos

Un cast es una forma abreviada de declarar la conversión de tipo de un atributo sin necesidad de escribir accesores ni mutadores. Devuélvelos en un array desde el método casts() del modelo.

Casts integrados

Los atributos null no se convierten. Tampoco definas casts con el mismo nombre que una relación ni casts para la clave primaria.

Cast Stringable

Con AsStringable puedes tratar el atributo como un objeto Illuminate\Support\Stringable.

Casts de arrays y JSON

Puedes tratar de forma transparente columnas JSON/TEXT como arrays PHP.
Con el operador -> puedes actualizar únicamente una clave concreta del JSON.

Casts AsArrayObject y AsCollection

El cast array estándar da error si intentas modificar directamente un offset del array. Con AsArrayObject o AsCollection esquivas ese problema.
Si quieres usar una colección propia, indícalo con using().

Casts de fecha y hora

created_at y updated_at se convierten a Carbon por defecto. Puedes declarar otras columnas de fecha del mismo modo.
Si indicas un formato, se utilizará al serializar a JSON.
Si quieres cambiar el formato de serialización por defecto de todas las fechas, sobrescribe serializeDate() (no afecta al formato con el que se guardan en BD).
Con immutable_datetime obtienes CarbonImmutable en vez de Carbon. Como no puedes modificar la instancia original, resulta más fácil escribir código sin efectos secundarios al manipular fechas.

Cast a Enum

Puedes usar enums respaldados (backed enums) de PHP 8.1+ como cast.
En la BD se guarda el valor respaldado (string o int) y al recuperarlo se convierte en la instancia del enum.

Cast de un array de enums

Si quieres almacenar varios valores de un enum como array en una única columna, utiliza AsEnumCollection.

Casts en tiempo de consulta

Para aplicar casts de forma dinámica al ejecutar una consulta utiliza withCasts().

Casts personalizados

También puedes crear tus propias clases de cast. Implementa la interfaz CastsAttributes y define los métodos get y set.
Para más detalles (patrón Value Object, casts inbound, Castables, etc.), consulta la página avanzada.

Detalle de los casts personalizados

Descubre cómo implementar la interfaz CastsAttributes, así como patrones avanzados como Value Object o Castables.

Páginas relacionadas

API resources de Eloquent

Aprende a usar las clases de recurso para convertir los modelos en respuestas JSON API coherentes.
Última modificación el 13 de julio de 2026