15. 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.
10 comentarios
Inicia sesión para comentar
Comentarios:
-
Felix Moreno hace 10 meses
Hola a todos
No me funcionan, ni los mutadores ni los accesores, no los transforma, no da error ni nada, pero no hace la transformación, he probado las diferentes formas que indican en el curso y las de los compañeros pero sigo igual. Graba la información tal y como la escribo y a la hora de mostrarla, la muestra tal y como esta en la base de datos
¿Saben que puede pasar?
Un saludo-
Victor Arana Flores hace 9 meses
Hola Felix, es probable que estes importando otra definicion de Attribute, y no la correspondiente a eloquent
-
Felix Moreno hace 9 meses
Le echare un ojo
Me esta encantando del curso :-) -
Edgar Soto hace 9 meses
Borra cache, a mi me funcionó.
php artisan cache:clear
-
Gonzalo Chable hace 4 meses
Me pasó lo mismo y funcionó con esta solución, gracias, saludos
-
-
Martzdev hace 1 año
protected function autor(): Attribute { return Attribute::make(set: fn ($value) => strtolower($value)); } protected function titulo(): Attribute { return new Attribute( set: function ($value) { return strtolower($value); } ); }
-
Victoria León Estañol hace 2 años
Hola, Como se llama la extension que estas usando para que te acomplete la información?
-
Victor Arana Flores hace 2 años
Uso varios, los voy mencionando a lo largo de todo el curso.
-
Krozz hace 1 año
He instalado las que mencionas en el curso, pero no me autocompleta como en este video cuando haces las funciones
-
-
Juan Hernandez hace 2 años
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 hace 2 años
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 hace 2 años
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 hace 2 años
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.
-
Victor Arana Flores hace 2 años
Me alegra que te guste el curso :D
-
-
Walter hace 2 años
? 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 hace 2 años
El mejor profesor de Laravel de todos los que vi
-
Victor Arana Flores hace 2 años
Gracias Francisco
-
-
Daniel Torres hace 2 años
Tener en cuenta que esta clase es para Laravel 9. Al final se explica cómo realizarlo para versiones anteriores al 9.
-
David Sanchez hace 2 años
A mi me da error en cualquiera de las 2 formas, tengo laravel 8
return new Attribute(
set: fn($value) =>strtolower($value)
);
muestra este error: syntax error, unexpected ':', expecting ')'Ver el problema
-
Emerson Daniel Machado Alvarez hace 2 años
En el get de arriba debes terminarlo con , no con ; ese es el error
-