16. Mutadores y Accesores

Los mutadores te permiten modificar los valores de los atributos antes de guardarlos en la base de datos, mientras que los accesores te permiten acceder a los valores de los atributos de manera formateada. En este capítulo, te enseñaremos cómo definir mutadores y accesores en tus modelos Eloquent, cómo utilizarlos para modificar y acceder a los valores de los atributos y cómo utilizar los mutadores y accesores en las vistas de tu aplicación. Además, conocerás cómo utilizar los mutadores y accesores para encriptar y desencriptar datos sensibles, y cómo utilizarlos para formatear los valores de fecha y hora. Con estos conocimientos, podrás modificar y acceder a los valores de los atributos de tus modelos Eloquent de manera controlada en tus aplicaciones Laravel utilizando mutadores y accesores.


8 comentarios

Inicia sesión para comentar

Comentarios:

  • Victoria León Estañol

    Victoria León Estañol hace 4 meses

    Hola, Como se llama la extension que estas usando para que te acomplete la información?

  • Juan Hernandez

    Juan Hernandez hace 6 meses

    Para los que tengan error yo lo solucione con el comentario que puso @Johaan Sting pero también me salí de tinker y lo Inicie de nuevo el tinker y ya me guarda en minúscula 
    PD: yo hice la prueba con el correo, en vez de name le cambie a email.

  • Johann Stig

    Johann Stig hace 6 meses

    Hola Victor, no me funcionó de la forma que lo hiciste ni tampoco por la sugerida por Gerardo Vera. También estoy usando Laravel 9. Qué puede estar pasando ?

  • Gerardo Vera Velasco

    Gerardo Vera Velasco hace 6 meses

    No sé por qué no me funcionó pero lo hice de otra forma, y ya funcionó. Estoy trabajando con Laravel Sail (Laravel 9), no sé si tenga algo que ver, de igual forma les comparto la manera en que lo hice.

     

    use Illuminate\Database\Eloquent\Casts\Attribute;

    protected function name(): Attribute{

    return Attribute::make(
     

    get: fn ($value) => ucwords($value),

    set: fn ($value) => strtolower($value)

    );

    }

  • Edgardo

    Edgardo hace 7 meses

    Me gusta tu estilo de explicar calmadamente, vengo de un curso de Laravel que me estresó por ser de la versión 6 y mas encima el profesor hablaba como si tratara con expertos.

  • Walter

    Walter hace 8 meses

    📌 La información que vamos a almacenar en nuestra BD, la mayoría de las veces, va a llegar desde formularios.

     

    📌 Mutadores

          Se colocan dentro de los Modelos encargados de almacenar la información que les llega y transformarla antes de guardarla.

          Para agregar un mutador lo primero es agregar en el Modelo User.php en la parte de arriba una definición: 

    use Illuminate\Database\Eloquent\Casts\Attribute;

          Luego incluimos un método dentro de la clase User, debe tener el mismo nombre que el atributo que quiera modificar.

    	protected function name(): Attribute 
    	{
    		return new Attribute(
    			set: function($value) {
    				return strtolower($value);
    			}
    		);
    	}

     

    📌 Accesores

          Hace el proceso inverso que los mutadores, es decir, cuando recuperamos información de la BD la modifica antes de presentarla.

          En el mismo lugar donde agregamos set: ahora añadimos:

    get: function($value) {
    	return ucwords($value);
    }

          Podemos usar la notación de función flecha: 

    get: fn($value) => ucwords($value)

     

    📌 Formas legacy que podemos encontrar para las definiciones de mutadores y accesores

    public function setNameAttribute($value) {
    	$this->attributes['name'] = strtolower($value);
    }
    
    public function getNameAttribute($value) {
    	return ucwords($value);
    }

     

  • Francisco Peña

    Francisco Peña hace 8 meses

    El mejor profesor de Laravel de todos los que vi

  • Daniel Torres

    Daniel Torres hace 10 meses

    Tener en cuenta que esta clase es para Laravel 9. Al final se explica cómo realizarlo para versiones anteriores al 9.