Liigu sisu juurde

Päringukoostaja

DocStore ja SegmentedLog pakuvad query(). DocStore saab kasutada sekundaarseid indekseid; SegmentedLog rakendab samu tingimusi voogedastusega kirjete puhul.

PHP
$records = $docs
    ->query()
    ->where('kind')->eq('page')
    ->where('status')->in(['draft', 'published'])
    ->where('publishedAt')->between($from, $until)
    ->orderBy('publishedAt', 'desc')
    ->limit(50)
    ->get();

Kasulikud lõppmeetodid:

PHP
$docs->query()->where('slug')->eq('home')->first();
$docs->query()->where('kind')->eq('page')->count();
$docs->query()->cursor($lastId)->page(100)->get();
$docs->query()->where('slug')->eq('home')->explain();

DocStore puhul saavad kaks eq tingimust mitteunikaalsetel võrdsusindekseeritud väljadel kasutada automaatset liitindeksi ämbrit. Üksik võrdsus, in ja vahemikuoperaatorid kasutavad endiselt seadistatud väljade indekseid.

Operaatorid:

  • eq, neq
  • in, notIn
  • gt, gte, lt, lte, between
  • exists, missing
  • prefix
  • andWhere, orWhere
  • orderBy, limit, cursor, page

andWhere ja orWhere kasutavad tagasikutseid, sest and ja or on reserveeritud PHP märksõnad:

PHP
$docs->query()
    ->where('kind')->eq('page')
    ->orWhere(fn ($q) => $q->where('kind')->eq('post')->where('featured')->eq(true))
    ->get();

Aheldatud where() kutsed ühendatakse operaatoriga AND; iga orWhere() haru lisab alternatiivi.

Mida eri moodi käivitatakse

Iga tingimus töötab iga kogumiga; indeksid mõjutavad ainult töö mahtu. DocStore puhul lahendatakse eq ja in võrdsusindeksite abil, vahemikuoperaatorid ja prefix vahemikuindeksite abil ning orderBy koos vahemikuindekseeritud välja limit-ga loeb andmeid indeksi järjestuses. Kõik muu filtreeritakse kirjete skannimisel. Kui päringuplaanur ei saa välja orderBy indeksist teenindada, sordib see sobivad kirjed PHP-is, mistõttu tasub seda suurte kogumite puhul kasutada koos indekseeritud tingimustega. count() kasutab DocStore puhul indeksikirjete arvu ja SegmentedLog puhul mälus olevaid loendureid, kui filter on üks võrdsustingimus.

cursor($id) piirab tulemused kirjetega, mis järgnevad sellele ID-le. Koos valikuga page() võimaldab see lehekülgi stabiilselt kirje ID järgi järjestada. Lihtsamate voogedastusega filtrite jaoks ilma koostajata vaata lehte Päringud.