Δημιουργός ερωτημάτων
Τα DocStore και SegmentedLog προσφέρουν το query(). Το DocStore μπορεί να χρησιμοποιεί δευτερεύοντα ευρετήρια· το SegmentedLog εφαρμόζει τις ίδιες συνθήκες σε εγγραφές που διαβάζονται σε ροή.
$records = $docs
->query()
->where('kind')->eq('page')
->where('status')->in(['draft', 'published'])
->where('publishedAt')->between($from, $until)
->orderBy('publishedAt', 'desc')
->limit(50)
->get();
Χρήσιμες τελικές μέθοδοι:
$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, δύο συνθήκες eq σε πεδία με ευρετήρια ισότητας που δεν επιβάλλουν μοναδικότητα μπορούν να χρησιμοποιήσουν έναν αυτόματο σύνθετο κάδο. Οι μεμονωμένες συνθήκες ισότητας, το in και οι τελεστές εύρους συνεχίζουν να χρησιμοποιούν τα διαμορφωμένα ευρετήρια πεδίων τους.
Τελεστές:
eq,neqin,notIngt,gte,lt,lte,betweenexists,missingprefixandWhere,orWhereorderBy,limit,cursor,page
Τα andWhere και orWhere χρησιμοποιούν συναρτήσεις επανάκλησης επειδή τα and και or είναι δεσμευμένες λέξεις-κλειδιά PHP:
$docs->query()
->where('kind')->eq('page')
->orWhere(fn ($q) => $q->where('kind')->eq('post')->where('featured')->eq(true))
->get();
Οι διαδοχικές κλήσεις where() συνδυάζονται με AND· κάθε διακλάδωση orWhere() προσθέτει μια εναλλακτική.
Πώς εκτελούνται τα ερωτήματα
Κάθε συνθήκη λειτουργεί σε κάθε συλλογή· τα ευρετήρια αλλάζουν μόνο το κόστος.
Στα DocStore, τα eq και in επιλύονται μέσω ευρετηρίων ισότητας, οι τελεστές εύρους
και το prefix επιλύονται μέσω ευρετηρίων εύρους, ενώ τα orderBy με
limit σε πεδίο με ευρετήριο εύρους διαβάζουν με τη σειρά του ευρετηρίου. Όλα τα υπόλοιπα
φιλτράρουν μια σάρωση εγγραφών. Το orderBy σε πεδίο που ο σχεδιαστής ερωτημάτων δεν μπορεί να εξυπηρετήσει από ευρετήριο ταξινομεί τις
εγγραφές που ταιριάζουν στη PHP, επομένως σε μεγάλες συλλογές συνδυάστε το με συνθήκες που χρησιμοποιούν ευρετήρια.
Το count() χρησιμοποιεί πλήθος καταχωρίσεων ευρετηρίου στα DocStore και μετρητές στη μνήμη στα
SegmentedLog, όταν το φίλτρο είναι μία ισότητα.
Το cursor($id) περιορίζει τα αποτελέσματα στις εγγραφές μετά το αναγνωριστικό, κάτι που συνδυάζεται με το page() για σταθερή σελιδοποίηση ταξινομημένη κατά αναγνωριστικό εγγραφής. Για απλά φίλτρα ροής χωρίς τον δημιουργό, δείτε την ενότητα Ερωτήματα.