Skip to main content

Qué son los casts

Los casts de Eloquent convierten los valores en bruto obtenidos de la base de datos a tipos de PHP y, al guardar, aplican la conversión inversa. Se declaran en el método casts.

Tipos de casts integrados

Lista de los casts que Laravel ofrece de forma predeterminada.
AsArrayObject y AsCollection se implementan internamente en Laravel como casts personalizados para permitir modificar directamente offsets concretos del array.

Crear una clase de cast personalizado

Cuando los casts integrados no cubren la conversión que necesitas, crea un cast personalizado implementando la interfaz CastsAttributes.

Definición de la interfaz

El contrato del framework se define así:
Como el argumento $attributes contiene todos los atributos del modelo, es posible hacer conversiones que abarquen varias columnas (ver el patrón Value Object más abajo).

Implementación básica de un cast personalizado

Genera el esqueleto con el comando make:cast.
Se crea app/Casts/AsMoney.php. Como ejemplo, vamos a implementar un cast que convierte un importe (almacenado como entero) en un Value Object Money.
Aplica el cast en el modelo.
Con esto, $order->price devuelve una instancia de Money.

Casts de Value Object

Patrón para tratar varias columnas de la BD como un único Value Object.

Ejemplo: cast de dirección

Combina las dos columnas address_line_one y address_line_two en un Value Object Address.
Si set devuelve un array, Eloquent interpreta las claves como nombres de columna y guarda cada valor en su columna correspondiente. En casts de una sola columna se devuelve una cadena o un entero.
Aplicación al modelo y uso:

Caché del Value Object

Eloquent cachea los atributos convertidos en Value Objects. Si accedes dos veces al mismo atributo, se devuelve la misma instancia. Si quieres desactivar la caché, añade la propiedad $withoutObjectCaching a la clase del cast.

Casts entrantes (solo escritura)

Casts que solo aplican la conversión al escribir en la BD, sin transformar nada al leer. Se implementan mediante la interfaz CastsInboundAttributes. Un uso típico es el hashing. Solo se transforma al guardar contraseñas o valores secretos; al leer se devuelve el hash tal cual.

Parámetros de cast

Para pasar parámetros a un cast personalizado, especifícalos tras el nombre de la clase separados por dos puntos. Varios parámetros se separan por comas.
Los parámetros se pasan al constructor de la clase del cast.

Castables: colocar la lógica de cast en el propio Value Object

Un Value Object que implementa la interfaz Castable proporciona un método castUsing que devuelve su clase de cast. Con esto, el modelo no necesita conocer la clase de cast y la lógica de dominio queda mejor organizada.
En el modelo, indica la clase del Value Object en lugar de la del cast.
Combinando Castable con una clase anónima puedes reunir el Value Object y la lógica de cast en un solo archivo.

Interacción con $appends y $hidden

Los casts y $appends / $hidden son mecanismos independientes, pero al combinarlos hay que tener cuidado.
En $hidden se especifican nombres de columna de la BD. No debes indicar el atributo generado por el cast (address), sino las columnas originales (address_line_one, address_line_two).

Añadir casts en tiempo de ejecución

Cuando quieras añadir un cast solo para una consulta o una petición concreta, usa el método mergeCasts.

Próximos pasos

Observers de Eloquent y eventos del modelo

Aprende a engancharte a los eventos del ciclo de vida (guardar, borrar, etc.) del modelo para añadir procesamiento.
Última modificación el 13 de julio de 2026