Коли я писав про 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.