¿Sabias que tenemos una forma de detectar los cambios de valores en los modelos Eloquent? Si! Laravel nos da un serie de métodos muy útiles para trabajar con los atributos recién modificados y en esté artículo vamos a explicarlos porque no están en la documentación oficial (al menos hoy en día con Laravel 5.7).
Vamos a utilizar estos métodos en los observers (si no sabes lo que son, puedes hacer click aquí), ya que me parecen el lugar justo para trabajar con acciones sobre los modelos (crear, eliminar, modificar, etc).
Detectando modificaciones: isDirty
Primero, vamos a ver el método isDirty(). Esta función (como su nombre nos indica) nos dice si el modelo o uno de sus atributos «esta sucio» devolviendo verdadero o falso si el atributo esta modificado.
Utilizando el método isDirty con Observers y Eloquent
Supongamos que estamos desarrollando un carrito compras y cada vez que agregamos (o quitamos) un producto, tenemos que re calcular el precio total del carrito. Entonces, simplemente hacemos:
Inversa de isDirty: isClean
También tenemos la función inversa de isDirty, que nos devuelve verdadero o falso si el modelo o el atributo permanecieron igual, el método es isClean.
La verdad que no se me ocurre un ejemplo para hacer con isClean. Si a alguien se le ocurre uno, déjelo en los comentarios por favor y al mejor ejemplo, lo agrego en la publicación. 😀
¿Cómo saber que atributos se modificaron?
Ahora bien, con isDirty sabemos que el modelo o uno de sus atributos fue modificado pero, ¿y si queremos saber CUAL de los atributos fue modificado? ¿Tenemos un método para esto? Y con Laravel sabemos que la respuesta es SI. La función se llama getDirty y nos devuelve un array con todos los atributos modificados, genial!
Utilizando el método getDirty con Observer y Eloquent
Supongamos que estamos aplicando más seguridad a nuestro sistemas y queremos informarles a nuestros usuarios cada vez que su contraseña es modificada. Para este caso, el método getDirty es perfecto.
Conclusión
Sabemos que hay muchas formas de hacer esto mismo en programación, pero trabajar con métodos auto descriptivos es parte de las buenas practicas de programación. Y trabajar con estas funciones de Eloquent que detectan y obtienen las modificaciones en un modelo, me parece genial. Espero que a vos también te hayan gustado y te animes a jugar un poco con estos métodos. Nos vemos en el próximo artículo. 😉🤙