
# 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](https://storh.inline0.dev/tr/docs/queries) sayfasına bakın.
