انتقل إلى المحتوى

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

يوفر 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() لتقسيم مستقر إلى صفحات مرتبة حسب معرّف السجل. للاطلاع على المرشحات المتدفقة البسيطة دون المنشئ، راجع الاستعلامات.