Otra de las posibilidades que tenemos con los modelos es que podemos definir el alcance de las operaciones que realicemos con los modelos a través de los Scopes.
Esto quiere decir que podemos restringir la cantidad o los valores que nuestro modelo retornará a una condición específica. Un caso de uso para los Query Scopes sería, por ejemplo, si quisiéramos restringir la consulta de datos a solo los que tengan el project_id mayor a 100, esto quiere decir que aún si se consultan todos los registros de la tabla projects a través del modelo Project, se le listarán todos los proyectos con project_id mayor a 100 y los 100 primeros no aparecerán aún cuando estén activos y existentes en la tabla.
Por supuesto, son más los aspectos en los cuales los podemos usar, pero también dependerá de ciertas condiciones que nos de el proyecto en el cual estemos trabajando.
Global Scopes 🌎
Los Scopes Globales los encontramos como archivos que están aparte, en su implementación más básica, generalmente están en la carpeta App/Scopes y se componen de una estructura como esta:
Este ejemplo se implementaría llamando este Scope en nuestro controlador, su función apply recibe dos parámetros, el primero es el builder o la sentencia que escribimos para ejecutar acciones (el código que usamos para realizar acciones sin usar SQL) y luego el modelo, lo que hará este método será agregarle a la sentencia del builder la condición de que la edad sea mayor a 200 (para efectos de este ejemplo).
Local Scopes 🖼
Podemos tener Scopes locales, este lo agregamos en forma de una función dentro del modelo y lo anexamos directamente a la consulta cuando se vaya a realizar, por ejemplo:
Si implementamos esta función y la llamamos en ProjectController justo cuando estamos haciendo una consulta de datos, nos agregará por debajo la condición de que sólo traerá registros cuyo valor en el campo is_active sea igual a 1.
La forma de implementarlo sería la siguiente:
<pre>Project::active()->get();</pre>
Puedes usar Global Scope o Local Scope dependiendo de tu necesidad, yo te recomendaría que lo hagas cuando sea necesario y de manera local (o sea, dentro del modelo), de esta forma tendrás un control más personalizado del ámbito en el cual controlas tus datos.
En la siguiente clase conocerás sobre una herramienta que nos permite crear consultas e interactuar con la base de datos de una manera más limpia y segura llamada Query Builder.