
Jeśli jeszcze nie znasz scope’ów Laravela, to tutorial w sam raz dla ciebie 😉.
Czym są scope’y
Laravel ma dwa rodzaje scope’ów: globalne i lokalne. Żeby nie komplikować, omówię tu tylko te lokalne, ale przy okazji zajrzyj też do scope’ów globalnych.
Czym więc jest lokalny scope zapytania w Laravelu? Dobrze, że pytasz. Oto przykład lokalnego scope’a w modelu użytkownika:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
public function scopeAdmin($query)
{
return $query->where('admin', 1);
}
}
W powyższym kodzie metoda scopeAdmin zwraca $query, w którym kolumna admin ma wartość 1. Skoro wiesz już, jak wygląda lokalny scope, zobaczmy, jak go użyć.
Jak używać scope’ów
Żeby wykorzystać nasz scopeAdmin w projekcie i dostać kolekcję użytkowników z uprawnieniami administratora, wystarczy napisać tyle:
$admins = User::admin()->all();
To zwróci nam każdego admin z bazy danych.
Mam nadzieję, że już widać, jak potężne to narzędzie, ile czasu oszczędzają scope’y i o ile czytelniejszy robi się dzięki nim kod. Jeśli nadal cię nie przekonały, czytaj dalej, zaraz zobaczysz przykład, który pokazuje, jak ułatwiają życie.
Po co używać scope’ów
Wróćmy do poprzednich przykładów. Powiedzmy, że chcemy zmienić zapytanie tak, żeby zwracało wyłącznie wiersze admin, w których kolumna active ma wartość 1. Bez scope’ów w aplikacji trzeba by wytropić w całym kodzie każde wystąpienie tego zapytania:
$admins = User::where('admin', 1)->all();
I zastąpić je tym:
$admins = User::where('admin', 1)->where('active', 1)->all();
Ze scope’ami wystarczy natomiast zmienić sam scope:
public function scopeAdmin($query)
{
return $query->where('admin', 1)->where('active', 1);
}
Wszystkie istniejące zapytania zwrócą wtedy użytkowników admin, u których active wynosi 1. Jak widać, kod robi się wydajniejszy, łatwiejszy w utrzymaniu i czytelniejszy.
Podsumowanie
Używanie scope’ów w aplikacji Laravel przenosi logikę do modeli Eloquent, zamiast rozsiewać ją po widokach i kontrolerach. Dzięki temu projekt łatwiej się utrzymuje i czyta.
Mam nadzieję, że ten artykuł pozwolił ci lepiej zrozumieć scope’y Laravela i że sięgniesz po nie w kolejnych projektach ✌️.


