Query scopy
Trait pridáva query scopy na filtrovanie a zoraďovanie modelov vlastníkov podľa ich atribútov:
Product::query()->whereAttribute('color', 'white')->get();
Product::query()->whereAttribute('rating', 5)->get(); // typed equality
Product::query()->whereAttributeIn('rating', [3, 5])->get();
Product::query()->whereHasAttribute('on_sale')->get();
Product::query()->whereDoesntHaveAttribute('on_sale')->get();
Product::query()->whereAttributeBetween('rating', 2, 4)->get(); // numeric range
Product::query()->whereAttributeBetween('published_at', $from, $to)->get(); // chronological
Product::query()->whereAttributeNull('note')->get(); // present, value NULL
Product::query()->whereAttributeNotNull('note')->get();
Product::query()->orderByAttribute('rating', 'desc')->get(); // 10, 9, 2 — numbers sort numerically| Scope | Ponechá vlastníkov, ktorých atribút… |
|---|---|
whereAttribute($name, $value) | sa rovná hodnote — porovnanie podľa typu (pozrite nižšie). |
whereAttributeIn($name, array $values) | sa rovná jednej z hodnôt; null v zozname zodpovedá uloženému null. |
whereAttributeBetween($name, $min, $max) | leží v uzavretom intervale — čísla číselne, dátumy chronologicky, ostatné ako text. |
whereAttributeNull($name) | je prítomný s hodnotou NULL. |
whereAttributeNotNull($name) | je prítomný s hodnotou inou ako NULL. |
whereHasAttribute($name) | je prítomný. |
whereDoesntHaveAttribute($name) | chýba. |
orderByAttribute($name, $direction = 'asc') | — zoradí vlastníkov podľa hodnoty (asc alebo desc): čísla číselne, ostatné typy podľa uloženého textu. |
Kombinovanie scopov
Ide o bežné Eloquent scopy, takže sa reťazia navzájom aj so zvyškom query buildera:
$products = Product::query()
->whereAttribute('color', 'white')
->whereHasAttribute('on_sale')
->whereAttributeBetween('published_at', now()->subMonth(), now())
->orderByAttribute('rating', 'desc')
->paginate(20);Ako sa hodnoty porovnávajú
Porovnania rešpektujú typ. Odovzdaná hodnota sa vezme v type z definície atribútu, ak ju má — reťazec „5“ z requestu tak nájde uložené celé číslo 5 — inak vo svojom vlastnom PHP type, takže celé číslo 5 nezodpovedá uloženému reťazcu „5“. Celé a desatinné čísla tvoria jednu číselnú rodinu (10 zodpovedá 10.0).
Čísla sa porovnávajú a zoraďujú číselne, dátumy chronologicky — ukladajú sa v UTC, takže hranice fungujú v ľubovoľnom časovom pásme — a reťazce lexikograficky. orderByAttribute() prijíma asc alebo desc; čokoľvek iné zoradí vzostupne.
Šifrované hodnoty tieto scopy nedokážu porovnať, ohraničiť ani zoradiť, pretože ich šifrový text je nedeterministický; scopy na prítomnosť a NULL fungujú ďalej. Soft-deleted atribúty ignoruje každý scope.
Scopy modelu Attribute
Samotný model Attribute ponúka scopy forName, forOwner a ofType na priame dopytovanie riadkov:
use RoundlyConsulting\Attributes\Enums\AttributeType;
use RoundlyConsulting\Attributes\Models\Attribute;
Attribute::query()->forName('color')->count(); // rows named color, any owner
Attribute::query()->forOwner($product)->get(); // every row of one owner
Attribute::query()->ofType(AttributeType::Integer)->get(); // rows by stored typePrejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.