---
title: "Query scopy — Attributes for Laravel | Roundly"
description: "Filtrujte a zoraďujte modely vlastníkov podľa ich atribútov — zhoda, množiny, rozsahy, prítomnosť, NULL a poradie."
url: https://roundly-consulting.com/sk/open-source/navody/attributes-for-laravel/filtrovanie-podla-atributov
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Attributes for Laravel](https://roundly-consulting.com/sk/open-source/navody/attributes-for-laravel.md)

# Query scopy

Trait pridáva query scopy na filtrovanie a zoraďovanie modelov vlastníkov podľa ich atribútov:

```php
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, a to len medzi hodnotami rovnakého typu ako hranice. |
| `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:

```php
$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:

```php
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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/attributes-for-laravel.md)
