
# منشئ الاستعلامات

يوفر `DocStore` و`SegmentedLog` واجهة `query()`. ويمكن لـ `DocStore` استخدام الفهارس الثانوية؛ أما `SegmentedLog` فيطبق الشروط نفسها على السجلات المتدفقة.

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

الأساليب الختامية المفيدة:

```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`، يمكن لشرطين من `eq` على حقول مفهرسة بالمساواة وغير فريدة استخدام حاوية مركبة تلقائية. وتواصل عمليات مساواة الحقل الواحد و`in` ومعاملات النطاق استخدام فهارس الحقول المُهيأة لها.

المعاملات:

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

يستخدم `andWhere` و`orWhere` دوال رد النداء لأن `and` و`or` من الكلمات المحجوزة في PHP:

```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()` لتقسيم مستقر إلى صفحات مرتبة حسب معرّف السجل. للاطلاع على المرشحات المتدفقة البسيطة دون المنشئ، راجع [الاستعلامات](https://storh.inline0.dev/ar/docs/queries).
