Imagen de perfil

Detectar cambios en Eloquent

Imagina que necesitas detectar cambios en Eloquent, por ejemplo para en caso que cambie el valor de algún 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.

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, la lógica 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 cómo he dicho, tenemos muchas formas de hacerlo, pero yo personalmente prefiero pasar la responsabilidad al modelo.

10 junio, 2019
Cursosdesarrolloweb ©. Todos los derechos reservados.

Login

Create an Account Back to login/register