NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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
ScopePonechá 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 type

Prejavte 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 kryptomien

Odoslaní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.