الاستعلام والجلب مع العلاقات
المسار: تطوير نظام إدارة الأعراس ودعوات QR الوحدة: نمذجة قاعدة البيانات بـ Prisma
مدخل إلى الدرس: الاستعلام والجلب مع العلاقات
الاستعلام والجلب مع العلاقات — نظام إدارة الأعراس والمناسبات ودعوات QR | Next.js وPrisma | أديب الصلوي
طريقة الدراسة: اقرأ التعريف، تتبّع المثال في الشرح، نفّذه بنفسك، ثم اختبر النتيجة والحالات الاستثنائية قبل الانتقال.
أهداف هذا الدرس
- تشغيل استعلامات include و where داخل أمثلة Prisma.
- جلب مناسبة بعمق: ضيوفهم + ردوهم + حضورهم.
- قياس الحاجة لإعادة توزيع (map) في الحلول القابلة للتدوين.
مثال
import { prisma } from "@/lib/prisma";
export async function getEventWithGuests(slug: string) {
return prisma.event.findUnique({
where: { slug },
include: {
_count: { select: { guests: true, rsvps: true, checkIns: true } },
guests: {
include: { rsvp: true, checkIns: true },
orderBy: { createdAt: "asc" },
},
},
});
}قراءة العمليات
- findUnique + where slug — بحث مثالي بفهرس UNIQUE.
- include guests-with-nested — جلب علاقة مع أبناء في طلب واحد (N+1 محول).
- _count — عدّات بدون جلب الصفوف الأصلية.
- orderBy — ترتيب الضيوف حسب تاريخ إضافتهم من الأقدم إلى الأحدث.
المخطط: مخطط تسلسل استعلامة اللوحة (dashboard)
sequenceDiagram
participant SC as Server Component
participant PC as Prisma Client
participant PG as PostgreSQL
SC->>PC: findByUnique event (slug)
PC->>PG: SELECT events ...
SC->>PC: include guests (relations)
PC->>PG: SELECT guests ...
SC->>PC: _count
PC->>PG: SELECT counts ...
PC-->>SC: جسم مسطّح كامل
هل include مكلف؟
كل include يتحول إلى استعلام إضافي داخل معاملة (transaction) واحدة من Prisma؛ إذن يمكنك المشاركة في الحلول Atom بلا قلق. لكن احذر الـ N+1 اليدوي حين تجلب في حلقة for.
تمرين تطبيقي: اكتب دالة تعدد الـ rsvps المقبولة لحدث معيّن ثم عدّل الـ include لتشمل count دون تفريغ كل الصفوف.
أخطاء شائعة يجب تفاديها
- جلب داخل حلقة for — N+1 يبطئ اللوحة.
- findUnique بغير عمود مفهرس — يفقد سرعة الفهرسة.
- إعادة بناء صفوف يدوياً بدل rely على علاقات Prisma.
معجم مصطلحات الدرس
- include
- مفتاح توسيع الأبعاد لجلب الأبناء في نفس الاستعلام.
- _count
- تعبير عدّ الصفوف المرتبطة دون جلب محتواها.
- N+1
- نمط بطيء: استعلام لكل سطر من قائمة.
مراجعة وتمرين تثبيت المهارة
اختبار سريع: اشرح بعبارتك معنى «الاستعلام والجلب مع العلاقات»، ثم بيّن أين ستستخدمه داخل نظام تسجيل حضور دعوات مناسبة عبر رمز QR، وما الخطأ الذي يجب اختباره قبل الاعتماد على الحل.
تحدٍّ إضافي: غيّر شرطًا واحدًا في التطبيق، وتوقع النتيجة، ثم نفّذ الاختبار وفسّر الاختلاف.
الدرس التالي: الترحيلات migrations والبذور seed. من الأفضل إنهاء التجربة الحالية قبل متابعة الدرس التالي.