دورة تطوير نظام إدارة الأعراس والمناسبات ودعوات QR عمليًا

الاستعلام والجلب مع العلاقات

الاستعلام والجلب مع العلاقات — نظام إدارة الأعراس والمناسبات ودعوات QR | Next.js وPrisma | أديب الصلوي
وقت الدراسة
12 دقيقة

المسار: تطوير نظام إدارة الأعراس ودعوات 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. من الأفضل إنهاء التجربة الحالية قبل متابعة الدرس التالي.

دروس نصية

#1

نظرة عامة على الدورة والمخرجات

#2

مقدمة إلى Next.js وأسباب اختياره

#3

أساسيات schema.prisma والنماذج

#4

مقدمة Route Handlers وبنية الاستجابة

#5

فهم Server Components والجلب الآمن

#6

تصميم الرمز Secured والتوقيع HMAC

#7

بناء الإنتاج وتجنّب أخطاء الحالة المربكة

#8

تحليل المتطلبات وتحديد الكيانات

#9

إنشاء مشروع Next.js وتجربته

#10

نموذج المناسبة Event بالعلاقات

#11

واجهة إنشاء المناسبة POST /api/events

#12

تصميم صفحة الدعوة الإلكترونية

#13

توليد صورة QR من قاعدة الدعوة

#14

نشر المشروع على Vercel

#15

تصميم قاعدة البيانات والعلاقات

#16

تجريب PostgreSQL محلياً وإنشاء قاعدة الداتا

#17

نموذج المدعو Guest مع الرمز الموقّع

#18

واجهات الضيوف الإضافة والقائمة

#19

نموذج الرد RSVP التفاعلي

#20

تجربة المسح في بوابة الحفل

#21

قاعدة بيانات إنتاج مُدارة وأمانها

#22

تدفق الدعوة وقراءة QR من التوليد إلى الحضور

#23

تثبيت Prisma والاتصال بالقاعدة

#24

نموذج الرد Rsvp ومنع التكرار

#25

واجهة تسجيل الحضور POST /api/checkin

#26

صفحة قائمة الضيوف والفرز

#27

واجهة تتفهم حالة الحضور والحصر

#28

إدارة المتغيرات السرية بيئة وواجهة

#29

سيناريو المشروع وقواعد العمل

#30

بنية مجلدات المشروع ومسارات الصفحات

#31

الاستعلام والجلب مع العلاقات

#32

التحقق من المدخلات ومعالجة الأخطاء

#33

لوحة الإحصائيات الحية

#34

تأمين الروابط والهجمات الشائعة

#35

قائمة الفحص النهائي قبل الإطلاق

#36

الترحيلات migrations والبذور seed

عرض الدروس كاملة تحقق من صفحة تعلم الدورة
درس نصي 5/36
أنت تشاهد
الاستعلام والجلب مع العلاقات