
Si no conoces los scopes de Laravel, este es tu tutorial 😉 .
Qué son los scopes
En Laravel hay dos tipos de scopes (globales y locales). Para no complicarlo, aquí solo cubro los scopes locales, aun así, échale un vistazo a los scopes globales cuando tengas ocasión.
Entonces, ¿qué es un local scope en Laravel? Me alegra que lo preguntes. Aquí tienes un ejemplo de scope local dentro de un modelo de usuario:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
public function scopeAdmin($query)
{
return $query->where('admin', 1);
}
}
En el ejemplo de código anterior puedes ver que tenemos el método scopeAdmin, que devuelve una $query donde la columna admin vale 1. Ahora que ya has visto un ejemplo de scope local, vamos a aprender a usarlo.
Cómo usar los scopes
Si quieres usar nuestro scopeAdmin dentro del proyecto para obtener una colección de usuarios admin, basta con escribir esto:
$admins = User::admin()->all();
Con eso obtenemos todos los admin de la base de datos.
Con suerte ya ves lo potentes que son y cómo los scopes te ahorran tiempo y hacen tu código más legible. Si todavía no te convencen, sigue leyendo para ver un ejemplo de cómo pueden facilitarte la vida.
Por qué usar los scopes
Retomando los ejemplos anteriores, supongamos que queremos modificar la consulta para que solo devuelva los admin cuya columna active vale 1. Si no usáramos scopes en la aplicación, tendríamos que buscar esta consulta por todo el código:
$admins = User::where('admin', 1)->all();
Y sustituirla por:
$admins = User::where('admin', 1)->where('active', 1)->all();
En cambio, usando scopes basta con modificar el scope así:
public function scopeAdmin($query)
{
return $query->where('admin', 1)->where('active', 1);
}
Y todas las consultas existentes devolverán los usuarios admin cuyo active vale 1. Como ves, tu código gana en eficacia y es más fácil de mantener y de leer.
Conclusión
Usar scopes en tu aplicación Laravel lleva la lógica a los modelos Eloquent en lugar de dejarla directamente en las vistas y los controladores. Eso hace que el proyecto sea más fácil de mantener y de leer.
Espero que este artículo te haya servido para entender mejor los scopes de Laravel y que los uses en tus próximos proyectos ✌️.


