Локальні моделі та їх скоупи в Laravel за допомогою атрибута Scope

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 03 квітня, 2025
В Laravel 12 ми отримали можливість використовувати новий підхід для визначення локальних скоупів у моделях Eloquent. Дізнайтеся, як новий атрибут #[Scope] спрощує цей процес і зберігає ваші назви методів незмінними

Коли я писав про Laravel 12.4, я пропустив абсолютно новий спосіб написання локальних скоупів у моделях Eloquent 😅. Скільки себе пам'ятаю, скоупи запитів визначалися в моделі шляхом додавання префікса scope до імені публічного методу:

public function scopePopular(Builder $query): void
{
    $query->where('votes', '>', 100);
}
 
User::popular()->orderBy('created_at', 'DESC')->get();

У нових додатках на Laravel 12 все ще можна використовувати методи з префіксом scope* для визначення скоупів моделі, але тепер доступний новий #[Scope] атрибут, який дозволяє зберегти бажане ім'я методу:

use Illuminate\Database\Eloquent\Attributes\Scope;
 
#[Scope]
protected function popular(Builder $query): void
{
    $query->where('votes', '>', 100);
}

Детальніше про скоупи та роботу з Eloquent ви можете дізнатися в документації Laravel. Цю функцію впровадили в Laravel v12.4 — деталі обговорення та реалізації можна знайти у pull request #54450.