# Mutators

Los mutators de Laravel son una forma de alterar el dato que se va a almacenar en la base de datos. Esto posiblemente porque la cadena original puede optimizarse. Por ejemplo, guardar 0 o 1 en lugar de activo o inactivo.

Se definen en los modelos del proyecto. Pueden haber tantos como atributos o columnas de la tabla referenciada por el modelo.

Debes agregar el use del cast Attribute al modelo en el que vayas a crearlos.

use Illuminate\Database\Eloquent\Casts\Attribute;

La sintaxis es la de una función protegida asociada al atributo. El método make es un buen indicador de si hay algún error en la sintaxis como resultado de la versión de laravel utilizada. Este ejemplo está basado en Laravel 9, en otras versiones no será reconocido. Verifica siempre la versión en la que trabajas para usar la sintaxis adecuada.

La palabra set nos indica que es un mutator. Es el indicador de un setter, de la modificación de un dato previo a su almacenamiento. La función debe nombrarse como el atributo al que referencia. Debe usar también el formato camel case en sustitución del underlying usado en el atributo.

El mutator está descrito en la línea 5.

protected function firstName(): Attribute
    {
        return Attribute::make(
            get: fn ($value) => ucfirst($value),
            set: fn ($value) => strtolower($value),
        );
    }

En este ejemplo se entiende que hay un atributo first_name en la base de datos en la tabla user y cuando el atributo vaya a almacenarse por resultado de una inserción o actualización se aplicará un cambio a minúsculas por el método strtolower().