Ugrás a tartalomhoz

Lekérdezésépítő

A DocStore és a SegmentedLog a query() felületét kínálja. A DocStore használhat másodlagos indexeket; a SegmentedLog ugyanezeket a feltételeket alkalmazza az adatfolyamos rekordokra.

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

Hasznos záró metódusok:

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();

A DocStore esetén két eq feltétel nem egyedi, egyenlőségi indexelt mezőkön automatikus összetett gyűjtőt használhat. Az egyedi egyenlőség, a in és a tartományoperátorok továbbra is a konfigurált mezőindexeket használják.

Operátorok:

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

A andWhere és a orWhere visszahívási függvényeket használ, mert a and és a or fenntartott PHP kulcsszavak:

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

Az egymás után láncolt where() hívások ÉS kapcsolatba kerülnek; minden orWhere() ág egy további lehetőséget ad hozzá.

Hogyan hajtódik végre

Minden feltétel minden gyűjteményen működik; az indexek csak a művelet költségét módosítják. A DocStore esetén a eq és a in egyenlőségi indexeken keresztül oldódik fel, a tartományoperátorok és a prefix tartományindexeken keresztül, a tartományindexelt mezőn végzett orderBy a limit használatával pedig indexsorrendben olvas. Minden más rekordbejárással szűr. Ha a tervező nem tud indexből kiszolgálni egy mezőre vonatkozó orderBy műveletet, az egyező rekordokat memóriában rendezi PHP, ezért nagy gyűjteményeknél kapcsolja össze indexelt feltételekkel. A count() indexbejegyzés-számokat használ a DocStore esetén, memóriabeli számlálókat pedig a SegmentedLog esetén, ha a szűrő egyetlen egyenlőségvizsgálat.

A cursor($id) az adott azonosító utáni rekordokra szűkíti az eredményeket; a page() művelettel kombinálva stabil, rekordazonosító szerinti lapozást biztosít. A lekérdezésépítő nélküli egyszerű adatfolyamos szűrésről lásd a Lekérdezések részt.