Manipulación de Datos en Bases de Datos con PHP

Clase 16 de 37Curso de Introducción a Laravel 6

Contenido del curso

Crear PlatziPress

Construir Proyecto Final: API con TDD (Intermedio)

Resumen

Dominar la forma en que los datos se guardan y se muestran es fundamental para mantener la consistencia en cualquier aplicación. Con Eloquent, el ORM de Laravel, puedes transformar la información antes de almacenarla y al momento de leerla, sin modificar directamente los campos de tu base de datos. Esto se logra mediante dos mecanismos poderosos: los accessors y los mutators.

¿Qué son los accessors y cómo transforman la impresión de datos?

Un accessor es un método que defines dentro de tu modelo (entidad) para crear un campo lógico que retorna un valor transformado. No altera el dato original en la base de datos, solo cambia la forma en que se presenta [01:12].

La convención para nombrar un accessor en Eloquent sigue esta estructura:

  • Comienza con la palabra get.
  • En el medio se coloca el nombre del campo lógico.
  • Termina con la palabra Attribute.

Por ejemplo, para mostrar el nombre de un usuario siempre en mayúsculas, se crea el método getNameAttribute dentro del modelo de usuario [01:25]:

php public function getNameAttribute() { return strtoupper($this->attributes['name']); }

Aquí strtoupper es una función nativa de PHP que convierte una cadena de texto a mayúsculas. El campo lógico resultante se llama get_name, y es el que debes utilizar en tus vistas o rutas para ver la transformación aplicada [02:05].

¿Cómo aplicar accessors en diferentes modelos?

El mismo patrón se replica en cualquier entidad. Para los posts, se puede crear un accessor llamado gettítuloAttribute que retorne el título en mayúsculas [02:45]:

php public function getTítuloAttribute() { return strtoupper($this->attributes['título']); }

Lo importante es que en las rutas o vistas debes referenciar el campo lógico (get_título) en lugar del campo original. Si sigues usando el nombre del campo tal cual está en la base de datos, no verás ningún cambio [03:10].

¿Qué más puedes hacer con un accessor?

Las posibilidades son amplias. Puedes concatenar nombre y apellido para formar un campo llamado nombre_completo, generar una URL personalizada o aplicar cualquier formato. Por ejemplo, mostrar solo la primera letra en mayúscula usando ucfirst [05:28]:

php public function getTítuloAttribute() { return ucfirst($this->attributes['título']); }

¿Qué son los mutators y cómo controlan el almacenamiento?

Un mutator funciona de manera inversa al accessor: transforma el dato antes de guardarlo en la base de datos. Esto garantiza que sin importar cómo el usuario ingrese la información en un formulario, el dato se almacene con el formato estándar que tú definas [03:30].

La convención cambia ligeramente respecto al accessor:

  • Comienza con set.
  • En el medio va el nombre del campo real de la base de datos.
  • Termina con Attribute.

Para guardar siempre el nombre en minúsculas se usa strtolower, otra función nativa de PHP [04:08]:

php public function setNameAttribute($valor) { $this->attributes['name'] = strtolower($valor); }

El método recibe por parámetro el valor que el usuario envía. Ese valor pasa por la transformación y se asigna al campo correspondiente dentro del array de atributos del modelo.

¿Cómo verificar que el mutator funciona correctamente?

Después de configurar los mutators en los modelos de usuario y post, se ejecuta el comando de migración con carga de datos semilla (seeders) desde la terminal [04:55]:

bash php artisan migrate:fresh --seed

Al revisar la base de datos, los datos aparecen completamente en minúsculas. Sin embargo, al imprimir en pantalla, los accessors se encargan de mostrarlos en mayúsculas. Esta combinación crea un flujo limpio: datos estandarizados en almacenamiento y formateados al momento de la lectura.

¿Cuándo conviene usar accessors y mutators en tu sistema?

Estas herramientas son útiles cuando necesitas:

  • Mantener un formato uniforme en tu base de datos sin depender del usuario.
  • Presentar información con un formato visual distinto al almacenado.
  • Crear campos calculados como nombre completo, URLs amigables o etiquetas formateadas.

El criterio para aplicarlos depende de cada proyecto. Lo esencial es saber que Eloquent te da el control total sobre cómo entran y salen los datos, permitiéndote separar la lógica de presentación de la lógica de almacenamiento de forma elegante y mantenible.

¿Has usado accessors o mutators en algún proyecto? Comparte tu experiencia y cuéntanos qué transformaciones te han resultado más útiles.