Descubre cómo los Query Scopes en Laravel permiten encapsular condiciones comunes de consulta en modelos Eloquent, mejorando la reutilización, legibilidad y mantenimiento de tus aplicaciones con prácticas profesionales y escalables.
En el desarrollo de aplicaciones modernas con Laravel, manejar consultas a la base de datos de forma eficiente y clara es clave para mantener un código limpio, reutilizable y fácil de mantener. Los Query Scopes, una potente característica del ORM Eloquent, permiten encapsular condiciones comunes dentro de los modelos, evitando la repetición y promoviendo la reutilización.
En esta nota técnica, exploramos sus beneficios, implementación y buenas prácticas, destacando cómo mejoran la calidad y escalabilidad del código.
Son métodos definidos en los modelos Eloquent que encapsulan fragmentos de consulta reutilizables. Se dividen en:
Supongamos una aplicación de gestión de órdenes donde necesitamos filtrar órdenes pendientes y recientes. En lugar de repetir la lógica, definimos scopes en el modelo Order:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
class Order extends Model
{
/**
* Scope para órdenes pendientes.
*
* @param Builder $query
* @return Builder
*/
public function scopePending(Builder $query)
{
return $query->where('status', 'pending');
}
/**
* Scope para órdenes creadas en los últimos N días.
*
* @param Builder $query
* @param int $days
* @return Builder
*/
public function scopeRecent(Builder $query, int $days = 7)
{
return $query->where('created_at', '>=', now()->subDays($days));
}
}
// Uso en un controlador
$recentPendingOrders = Order::pending()->recent(3)->get();
Aquí, pending() y recent() encapsulan la lógica, facilitando su uso y evitando duplicación.
Los Query Scopes en Laravel son esenciales para crear aplicaciones escalables y fácilmente mantenibles. Centralizan la lógica de consultas, reducen errores, mejoran la colaboración y mantienen el código organizado. Aplicar esta técnica junto a principios SOLID, especialmente el de responsabilidad única, eleva la calidad arquitectónica del software.
Invito a la comunidad a integrar Query Scopes en sus proyectos para maximizar eficiencia y profesionalismo en el desarrollo con Laravel.
Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.