Užklausų kūrimo priemonė
DocStore ir SegmentedLog suteikia query(). DocStore gali naudoti antrinius indeksus; SegmentedLog taiko tuos pačius predikatus srautu skaitomiems įrašams.
$records = $docs
->query()
->where('kind')->eq('page')
->where('status')->in(['draft', 'published'])
->where('publishedAt')->between($from, $until)
->orderBy('publishedAt', 'desc')
->limit(50)
->get();
Naudingi pabaigos metodai:
$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();
Naudojant DocStore, dvi eq sąlygos neunikaliuose laukų lygybės indeksuose gali naudoti automatinį jungtinį segmentą. Viena lygybės sąlyga, in ir intervalų operatoriai toliau naudoja sukonfigūruotus laukų indeksus.
Operatoriai:
eq,neqin,notIngt,gte,lt,lte,betweenexists,missingprefixandWhere,orWhereorderBy,limit,cursor,page
andWhere ir orWhere naudoja atgalinio iškvietimo funkcijas, nes and ir or yra rezervuoti PHP raktažodžiai:
$docs->query()
->where('kind')->eq('page')
->orWhere(fn ($q) => $q->where('kind')->eq('post')->where('featured')->eq(true))
->get();
Sujungti where() iškvietimai jungiami AND sąlyga; kiekviena orWhere() šaka prideda alternatyvą.
Kaip vykdomos užklausos
Kiekviena sąlyga veikia su bet kuria kolekcija; indeksai keičia tik vykdymo sąnaudas. Naudojant DocStore, eq ir in sprendžiami per lygybės indeksus, intervalų operatoriai ir prefix – per intervalų indeksus, o orderBy su limit pagal intervalų indeksą turintį lauką skaito indekso tvarka. Visa kita filtruoja įrašų peržiūrą. Jei orderBy naudoja lauką, kurio planuoklis negali apdoroti per indeksą, atitinkami įrašai rikiuojami atmintyje naudojant PHP, todėl didelėse kolekcijose šį metodą derinkite su indeksuotomis sąlygomis. count() naudoja indekso įrašų skaičių DocStore atveju ir skaitiklius atmintyje SegmentedLog atveju, kai filtras yra viena lygybės sąlyga.
cursor($id) apriboja rezultatus įrašais po nurodyto ID; kartu su page() tai užtikrina stabilų puslapiavimą pagal įrašo ID. Apie paprastus srautinio filtravimo metodus be užklausų kūrimo priemonės skaitykite skyriuje Užklausos.