İçeriğe geç

Sorgu Oluşturucu

DocStore ve SegmentedLog, query() sunar. DocStore ikincil dizinleri kullanabilir; SegmentedLog aynı koşulları akış halindeki kayıtlar üzerinde uygular.

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

Yararlı son işlem yöntemleri:

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 üzerinde, benzersiz olmayan ve eşitlik dizinli alanlara uygulanan iki eq koşulu otomatik bir bileşik kovayı kullanabilir. Tekli eşitlik, in ve aralık işleçleri yapılandırılmış alan dizinlerini kullanmaya devam eder.

İşleçler:

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

andWhere ve orWhere geri çağırım kullanır; çünkü and ve or, PHP anahtar sözcükleri olarak ayrılmıştır:

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

Zincirlenmiş where() çağrıları VE ile birleştirilir; her orWhere() dalı bir alternatif ekler.

Nasıl yürütülür?

Her koşul her koleksiyonda çalışır; dizinler yalnızca maliyeti değiştirir. DocStore üzerinde eq ve in eşitlik dizinleriyle, aralık işleçleri ve prefix aralık dizinleriyle çözümlenir; orderBy ve aralık dizinli bir alandaki limit ise dizin sırasıyla okur. Diğer her şey kayıt taramasını filtreler. Planlayıcının dizin üzerinden sunamadığı bir alandaki orderBy, eşleşen kayıtları PHP içinde sıralar; bu nedenle büyük koleksiyonlarda bunu dizinlenmiş koşullarla birlikte kullanın. Filtre tek bir eşitlik olduğunda count(), DocStore üzerindeki dizin girdisi sayılarını ve SegmentedLog üzerindeki bellek sayaçlarını kullanır.

cursor($id) sonuçları kimlikten sonraki kayıtlarla sınırlar; kararlı sayfalama için kayıt kimliğine göre sıralanan page() ile birlikte kullanılabilir. Oluşturucu olmadan uygulanan düz akış filtreleri için Sorgular sayfasına bakın.