---
title: "Operátorové filtre — Query Builder for Laravel | Roundly"
description: "Pevné porovnania na serveri cez operator() a operátory volené klientom, napríklad not:, contains: či gte:, cez operators()."
url: https://roundly-consulting.com/sk/open-source/navody/query-builder-for-laravel/operatorove-filtre
language: sk
---

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

[Query Builder for Laravel](https://roundly-consulting.com/sk/open-source/navody/query-builder-for-laravel.md)

# Operátorové filtre

Porovnania pokrývajú dva konštruktory. operator() určí porovnanie v kóde; operators() nechá klienta vybrať z množiny, ktorú deklarujete.

## Pevné porovnania — operator()

operator() vyberie porovnanie na strane servera z enumu FilterOperator. Formát ostáva filter\[<name>\]=<value> — operátor sa z requestu nikdy nečíta. Použite ho namiesto ručne písaného porovnávacieho callbacku:

```php
use RoundlyConsulting\QueryBuilder\AllowedFilter;
use RoundlyConsulting\QueryBuilder\Enums\FilterOperator;

->allowedFilters(
    AllowedFilter::operator('min_views', FilterOperator::GreaterThanOrEqual, 'views'),
    AllowedFilter::operator('max_price', FilterOperator::LessThan, 'price'),
)

// ?filter[min_views]=10    → where('views', '>=', 10)
// ?filter[min_views]=10,20 → views >= 10 OR views >= 20
```

| Prípad | SQL |
| --- | --- |
| `FilterOperator::Equal` | `=` |
| `FilterOperator::NotEqual` | `!=` |
| `FilterOperator::GreaterThan` | `>` |
| `FilterOperator::GreaterThanOrEqual` | `>=` |
| `FilterOperator::LessThan` | `<` |
| `FilterOperator::LessThanOrEqual` | `<=` |

Zoznam oddelený čiarkami sa zmení na zoskupené OR toho istého porovnania — okrem FilterOperator::NotEqual, kde zoznam znamená „žiadne z týchto“ (whereNotIn), keďže OR s != by vyhovelo takmer každému riadku. Ostáva to obyčajné SQL, takže riadky, kde je stĺpec NULL, nevyhovejú ani jednej forme; negáciu, ktorá zahŕňa aj NULL, získate cez operators() s not.

## Operátory volené klientom — operators()

operators() je jediný konštruktor, pri ktorom request ovplyvní, ktoré porovnanie sa vykoná — a stále ide o rozhodnutie allow-listu v kóde. Request dodá token pred dvojbodkou (filter\[status\]=not:draft); samotná hodnota naďalej znamená predvolené správanie filtra, takže existujúce URL fungujú ďalej:

```php
use RoundlyConsulting\QueryBuilder\Enums\RequestedOperator;

->allowedFilters(
    AllowedFilter::operators('status', [RequestedOperator::Not]),
    AllowedFilter::operators('title', [RequestedOperator::NotContains], partialByDefault: true),
    AllowedFilter::operators('views', [RequestedOperator::GreaterThan, RequestedOperator::LessThanOrEqual]),
)

// ?filter[status]=draft              → status = 'draft'
// ?filter[status]=not:draft,archived → status NOT IN ('draft', 'archived'), or status IS NULL
// ?filter[title]=laravel             → title contains "laravel" (partialByDefault)
// ?filter[title]=ncontains:draft     → title does not contain "draft", or title IS NULL
// ?filter[views]=gt:20               → views > 20
// ?filter[views]=lte:10              → views <= 10
// ?filter[status]=1=1 or 1:draft     → the literal text — matches nothing
```

Signatúra: operators(string $name, array $operators, ?string $internalName = null, bool $partialByDefault = false, FilterValueShape $shape = FilterValueShape::Text). Tokeny:

| Token | Prípad | Efekt |
| --- | --- | --- |
| `is` | `RequestedOperator::Is` | Rovnosť; zoznam oddelený čiarkami je whereIn. |
| `not` | `RequestedOperator::Not` | whereNotIn — „ani jedno“; zahŕňa riadky, kde je stĺpec NULL. |
| `contains` | `RequestedOperator::Contains` | Zhoda %value%, veľkosť písmen zohľadní engine databázy; zoznam je zoskupené OR. |
| `ncontains` | `RequestedOperator::NotContains` | Neobsahuje; hodnoty sa spájajú cez AND a zahŕňa riadky NULL. Prázdna hodnota nerobí nič. |
| `starts` | `RequestedOperator::StartsWith` | Ukotvená zhoda prefixu value%. |
| `gt` | `RequestedOperator::GreaterThan` | `>` |
| `gte` | `RequestedOperator::GreaterThanOrEqual` | `>=` |
| `lt` | `RequestedOperator::LessThan` | `<` |
| `lte` | `RequestedOperator::LessThanOrEqual` | `<=` |

## Pravidlá

- Neznámy token alebo token, ktorý filter nedeklaroval, nie je operátor — celý reťazec sa stane hodnotou. filter\[status\]=1=1 or 1:draft hľadá presne tento text a nenájde nič.
- Vlastné predvolené správanie filtra — is, alebo contains pri partialByDefault — sa dá vždy pomenovať, takže klient sa môže vrátiť späť. Nič iné nie je implicitné: v poli s partialByDefault hľadá is:done presne tento text.
- Počíta sa len známy token pred prvou dvojbodkou, takže filter\[url\]=https://example.test stále hľadá samotnú URL.
- Operátor patrí filtru, nie hodnote: načíta sa z prvej položky a platí pre všetky. not:draft,archived znamená ani jedno.
- Obe negácie (not, ncontains) zahŕňajú aj riadky, kde je stĺpec NULL — „nie koncept“ zjavne zahŕňa aj „bez stavu“.
- true a false sú text ako každá iná hodnota. Na booleovskom stĺpci deklarujte shape: FilterValueShape::Boolean a not:true / not:false budú fungovať ako negácie skutočných booleanov (pozri Tvary hodnôt).

## 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/query-builder-for-laravel.md)
