Comparte en Facebook Twitter Google+

Laravel nos permite crear métodos para transformar o dar un formato automáticamente a los datos que leemos y guardamos en la base de datos. Estos son los Accesores y Mutadores (Accesors y Mutators), los cuales nos darán la certeza que se están guardando con el formato correcto en la base de datos o nos facilitarán el trabajo de mostrar los datos de manera más legible o en cualquier formato que queramos. Veamos cómo podemos crearlos.

Los Accesores son los métodos que se definen en el modelo para modificar el valor de un campo antes de ser devuelto para ser usado en una vista, controlador, etc.  Por su parte los Mutadores son los métodos que modifican los valores de un campo antes de ser guardados en una base de datos.

Tanto uno como otro se llaman automáticamente cuando se intenta acceder o establecer un campo como atributo de un modelo, como por ejemplo, $user->first_name .

Para definir un accesor se crea un método en el modelo siguiendo la siguiente convención para el nombre: getFooAttribute()  donde se comienza con la palabra get , luego el atributo que se quiere acceder con la nomenclatura camelCase y finalmente la palabra Attribute 

Para crear un mutador se sigue la misma convención pero solo cambia el prefijo a set , quedando el nombre así: setFooAttribute() 

Aplicación

Vamos a hacer uso del archivo de migración por defecto de laravel para el modelo User, pero con los siguientes atributos:

Configuramos nuestro proyecto de Laravel para que tenga las credenciales de una base de datos configuradas en el archivo .env

Ejecutamos la migración:

 Uno de los mutadores más comunes es cifrar la contraseña de un usuario, para eso creamos el método en el modelo User app/User.php y de esta manera cuando se establezca una nueva contraseña sea cifrada:

y otros dos para que el nombre y el apellido del usuario se conviertan a minúscula y su primer carácter mayúscula:

Nota cómo se asocia el campo last_name con su mutador setLastNameAttribute.

Ahora para probar creando un nuevo usuario en una ruta con lo siguiente:

Recuerda importar el namespace

Obteniendo como resultado:

donde la contraseña o password fue encriptada como se puede ver en la imagen:

resultado-mutator

De igual forma los accesor nos permiten darle formato a los atributos de un modelo, por ejemplo, mostrar el nombre con la inicial en mayúscula:

y al modificar la ruta para ahora mostrar el atributo first_name del usuario creado:

Obtenemos en pantalla: MARIA

Otro uso que le podemos dar a los accesor es unir varios atributos en uno solo y así dar un formato que nos sea de utilidad:

y de esta manera así no tengamos el campo full_name en la base de datos Laravel lo reconoce cuando hagamos el llamado:

Mostrando en pantalla: Maria Perez.

Espero que te haya gustado el tutorial y te sea muy útil. Compártelo en las redes sociales y recuerda que puedes dejar cualquier duda más abajo en la sección de comentarios.

Material relacionado

Aprende PHP, Laravel y más por sólo 999 al mes: ver planes.

Lección anterior Manejo de errores y excepciones en Laravel 5.1 Lección siguiente Directivas personalizadas con Blade en Laravel 5.1