Detectar cambios en Eloquent

Imagina que necesitas detectar cambios en Eloquent, por ejemplo para cuando cambie el valor de un atributo enviar un email a alguien notificando dicho cambio.

La verdad que existen muchas formas de hacer esto con Laravel, bien mediante Eloquent o directamente comprobando el valor en base de datos y el valor que viene de la petición Http, veamos el caso desde mi punto de vista incorrecto.


Está claro que este ejemplo va a funcionar y el trabajo se va a realizar de forma correcta, pero realmente esto no es responsabilidad del controlador, pienso que es mejor pasar esta responsabilidad al modelo, que es donde a través de los eventos de Eloquent podemos actuar de forma más eficaz.

 

Si estás interesado en Laravel 5  aquí te dejo varios recursos que estoy seguro te servirán para conocerlos a fondo en sus versiones actuales.

    Curso de Laravel 5.6, Cashier + Stripe, Socialite, Roles y Pusher

    Experto en Laravel 5

 

isDirty() y getDirty(), detectar cambios en Eloquent

La forma efectiva y sencilla de comprobar si algo ha cambiado en un modelo de Eloquent es utilizando los métodos isDirty y getDirty().

isDirty() nos ayuda a detectar si el modelo ha cambiado y devuelve un booleano, true si hay cambios, false no los hay.

getDirty() nos devuelve los cambios que han ocurrido en un array, uno por cada atributo que haya cambiado.

Conociendo los eventos de Eloquent y los métodos isDirty y getDirty, lo más lógico indica que debemos utilizarlos, así, además de reorganizar nuestro código, pasamos la responsabilidad a quien realmente la tiene, en este caso el modelo.


Una vez el modelo se encarga de notificar al usuario cuando existan cambios, nuestro controlador puede ser todavía más simple, lo cual siempre es algo muy bueno.


Para mi esta es la forma correcta de detectar cambios en Eloquent y hacer algo en consecuencia, es cierto que como he dicho, tenemos muchas formas de hacerlo, pero yo personalmente prefiero pasar la responsabilidad al modelo, espero que te haya parecido interesante.

Cursosdesarrolloweb ©. Todos los derechos reservados.

Login