Query scopes como buena práctica en Laravel

En ocaciones cuando estamos trabajando en equipo sobre una aplicación, debe de haber un  orden sistemático a las cosas para evitar cualquier confusión y permitir flexibilidad de código. Por ejemplo, en una arquitectura MVC, en el modelo sólo debe de mantener la lógica y en el controlador sólo las acciones que solicite la aplicación. Así de esta manera, cualquier persona que trabaje en el proyecto puede encontrar lo que está buscando fácilmente y puede cambiar, leer, o mejorar con mayor facilidad el código. Si esto no se sigue como debe de ser ,el proyecto se convertirá en un problema a medida que se hace mas grande y más grande.

Buena práctica

Una buena práctica básica sería evitar repetir código, es decir que si estas utilizando un fragmento de código o una condición varias veces, sería mejor que se preparara un método o un ámbito para esa acción. De esta manera, no tendrías que repetirte una y otra vez. Por ejemplo, digamos que tenemos en el controlador el siguiente código:

 

Como se puede ver, la condición where () se repite en ambos métodos. En un aplicación en la que se este trabajando, se utilizaría aún más.

Query Scopes

Podemos definir los como funciones o métodos que nos ayudan a reutilizar la lógica de los Modelos y esto nos puede ayudar a evitar que se duplique el where en el ejemplo anterior.

Vamos a definir en nuestro Modelo un query scopes y vamos a cambiar nuestro código en el Controlador de la siguiente manera.

En nuestro Controlador, lo cambiamos de la siguiente manera:

Como puede ver, hemos definido un método llamado scopeDone () en el Modelo, que está prefijado con la palabra scope y CamelCased. De esta manera Laravel puede entender que es un query scope , y puede utilizar ese scope directamente. por lo consiguiente ahora  las condiciones en el Controlador también han cambiado de (‘done’, false) a done ().

Mejorando el código

Por el momento solo ese scope trae tareas que están incompletas, pero que sucede si queremos traer también tareas completadas, lo primero que se nos ocurrirá es crear otro scope, pero en ves de pasarle el segundo parametro de false,

se lo cambiamos por true de la siguiente manera.

Esto no esta mal, pero lo que queremos es tener un código flexible y legible podemos crear scopes dinámicos , eso lo podemos hacer con nuestro scope anterior, veamos.

Como podemos observar modificamos nuestro scope, en el cual se le agrego un segundo parametro $flag, que ese nos ayudara a traer tareas completadas o incompletas.

De esta manera nos ahorramos en crear un nuevo scope y seguimos aprovechando el que ya teníamos anteriormente.

Conclusión

Espero que este post le haya sido de su agrado en el uso de query scopes de Laravel, como buena practica para no repetir tanto código y también recordarles pasar por nuestro canal de slack de Laravel en español en el cual los miembros de la comunidad están aportando día a día nuevas cosas.

 

Comparte este artículo

Entra en la discusión y deja tu comentario

Veces