Query Scopes - принцип DRY для запитів
Пишете where('status', 'active') у 20 контролерах? Перестаньте дублювати код.
Query Scopes дозволяють повторно використовувати логіку запитів. Описали один раз - застосовуєте всюди.
Два типи:
- Локальні скоупи - методи в моделі (з параметрами або без).
- Анонімні скоупи - inline-фільтри без визначення методу.
Чому варто використовувати скоупи:
- Повторне використання коду
- Краща читабельність
- Простота тестування
- Легко комбінуються між собою
Порада: Методи локальних скоупів починаються зі слова scope - Laravel автоматично прибирає його.
// User Model
public function scopeActive($query)
{
return $query->where('status', 'active');
}
public function scopeVerified($query)
{
return $query->whereNotNull('email_verified_at');
}
public function scopeCreatedAfter($query, $date)
{
return $query->where('created_at', '>', $date);
}
// Використання - чисто та читабельно
$users = User::active()->verified()->get();
$recentUsers = User::active()
->createdAfter(now()->subDays(7))
->get();
// Комбінування зі звичайними методами запиту
$admins = User::active()
->where('role', 'admin')
->orderBy('name')
->get();