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étodoprotected. El nombre del método se escribe en camelCase y su tipo de retorno debe ser Illuminate\Database\Eloquent\Casts\Attribute.
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 closureget 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 ashouldCache().
withoutObjectCaching().
Definir un mutador
El mutador se define en el argumentoset de Attribute::make(). Puedes combinarlo con el accesor en el mismo método.
set.
Escribir en varios atributos
Si la closureset 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étodocasts() del modelo.
Casts integrados
Cast Stringable
ConAsStringable 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.-> puedes actualizar únicamente una clave concreta del JSON.
Casts AsArrayObject y AsCollection
El castarray estándar da error si intentas modificar directamente un offset del array. Con AsArrayObject o AsCollection esquivas ese problema.
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.
serializeDate() (no afecta al formato con el que se guardan en BD).
Cast a Enum
Puedes usar enums respaldados (backed enums) de PHP 8.1+ como cast.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, utilizaAsEnumCollection.
Casts en tiempo de consulta
Para aplicar casts de forma dinámica al ejecutar una consulta utilizawithCasts().
Casts personalizados
También puedes crear tus propias clases de cast. Implementa la interfazCastsAttributes y define los métodos get y set.
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.