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

PostgreSQL na hodnotu nesprávneho typu odpovie chybou, nie „žiadnou zhodou“, takže filter[project]=garbage na uuid stĺpci je chyba 500, ktorú vyvolá ktokoľvek cez request. (MySQL a SQLite hodnotu naopak pretypujú — nečíselný reťazec sa zmení na 0 a potichu nájde riadok nula.) Deklarujte FilterValueShape na každom typovanom stĺpci a hodnoty, ktoré stĺpec nemôže obsahovať, sa k driveru nikdy nedostanú:

PrípadHodnotaPrijme
FilterValueShape::TexttextĽubovoľný reťazec — predvolené; nechráni nič.
FilterValueShape::UuiduuidPlatné UUID.
FilterValueShape::IdidNezáporné celé číslo do PHP_INT_MAX (maximum bigint).
FilterValueShape::Booleanbooleantrue/false/1/0 v ľubovoľnej veľkosti písmen; do dopytu príde ako skutočný boolean.
use RoundlyConsulting\QueryBuilder\Enums\FilterValueShape;
use RoundlyConsulting\QueryBuilder\Enums\RequestedOperator;

->allowedFilters(
    AllowedFilter::operators('author', [RequestedOperator::Not], 'author_id', shape: FilterValueShape::Id),
    AllowedFilter::nullable('project', 'project_id', FilterValueShape::Uuid),
    AllowedFilter::relation('label', 'labels', 'labels.id', FilterValueShape::Uuid),
)

// ?filter[author]=garbage     → empty result, no driver error
// ?filter[author]=not:garbage → excludes nothing
// ?filter[project]=12345      → empty result

Boolean navyše odovzdá dopytu skutočný boolean — text 'false' nie je false pre žiadny engine. V kombinácii s operators() dostane príznakový stĺpec aj negáciu:

->allowedFilters(
    AllowedFilter::operators('active', [RequestedOperator::Not], shape: FilterValueShape::Boolean), // not:true
)

Ako sa správa

  • Prijímajú ho operators(), nullable() a relation(); AllowedFilter::boolean() je operators() s tvarom Boolean. Predvolený Text nechráni nič, takže sa žiadny existujúci filter nezmení.
  • Hodnoty nesprávneho tvaru sa zahodia ešte pred zostavením dopytu. Ak nezostane žiadna, zhoda vráti prázdny výsledok — nikdy nefiltrovaný zoznam — a negácia nevylúči nič, keďže žiadny riadok nemohol vyhovieť.
  • Id odmietne aj čísla mimo rozsahu: PostgreSQL zlyhá na bigint mimo rozsahu rovnako ako na chybnom uuid.
  • Typovaný tvar nemožno kombinovať s operátorom z rodiny LIKE (contains, ncontains, starts) ani s partialByDefault — deklarácia vyhodí UnsupportedOperator namiesto zlyhania pri prvom requeste.

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.