يوفر AppMaster إمكانات واسعة النطاق للعمل مع قاعدة البيانات. على سبيل المثال، باستخدام كتلة البحث، يمكنك العثور على البيانات الضرورية، وإرفاق الجداول ذات الصلة بها، وفرزها بالترتيب الصحيح، وما إلى ذلك. ومع ذلك، في مواقف معينة، قد لا يكون هذا كافيًا، ثم تأتي كتلة SQL Exec إلى الإنقاذ. يسمح لك بتشغيل أي استعلامات قاعدة بيانات باستخدام القوة الكاملة لـ SQL.

لنفكر في تشغيل الكتلة باستخدام مثال قاعدة البيانات التي تحتوي على كتالوج الكتب.

Database structure

دعونا نقوم ببعض الأعمال التحضيرية. من الضروري إنشاء عملية تجارية تسمح، في أبسط أشكالها، بإرسال الطلبات وكذلك تلقي نتائجها.

Business process

ستحتاج أيضًا إلى إنشاء نقطة نهاية تسمح لك بالوصول إلى عملية الأعمال هذه.

Endpoint

في المرحلة الأولية، ينبغي أن يكون هذا كافيا. يمكنك نشر طلبك والانتقال إلى الاختبار. لهذا، من المريح جدًا استخدام Swagger، الذي يتم إنشاؤه تلقائيًا عند النشر.

نستخدم استعلامًا بسيطًا يجب أن يطلب جميع الكتب من قاعدة البيانات.

اختر * من public.book

يرجى ملاحظة أن الجدول نفسه (مثل كافة الجداول الأخرى التي تم إنشاؤها في محرر قاعدة البيانات) يحتوي على بادئة تشير إلى المخطط - عام.

SQL Request

يمكنك التحقق من إتمام الطلب بنجاح واستلام النتيجة.

SQL Response

لكن المشكلة تكمن في أنه من الصعب جدًا إدراك الإجابة بهذا الشكل. الحل المحتمل هو تعديل الطلب قليلاً وترك الحقول الضرورية فيه فقط، على سبيل المثال، عنوان الكتاب وعدد الصفحات. بالإضافة إلى ذلك، سيكون من المعقول تعيين حد، وليس طلب جميع الكتب من قاعدة البيانات، ولكن يقتصر على عشرة.

حدد الاسم، الصفحات من public.book LIMIT 10

SQL Response

أفضل بكثير، لكنه لا يزال غير مناسب للاستخدام الحقيقي. بعد كل شيء، في عملية الأعمال، لا تحتاج فقط إلى تلقي طلب، بل تحتاج أيضًا إلى القيام بشيء ما بنتيجته. لهذا، لا يكفي أن تكون النتيجة في شكل نص؛ تحتاج إلى تحويله إلى نموذج مناسب لمزيد من الاستخدام.

للقيام بذلك، دعونا نعود إلى عملية الأعمال ونحسنها قليلاً. في الكتلة النهائية، سنضيف متغيرًا جديدًا - مجموعة من نماذج الكتب.

Book Variable

ستحتاج أيضًا إلى كتلة تقوم بتحويل JSON المستلم نتيجة الطلب إلى نموذج. إلغاء تسلسل JSON إلى النموذج.

Updated Business process

دعونا نكرر الطلب السابق ونتأكد من أن النتيجة أصبحت أكثر ملاءمة، سواء للإدراك البصري أو لمزيد من الاستخدام في BP.

Updated SQL Response

والآن يمكننا الانتقال إلى منطق أكثر تعقيدًا. لنقم بإنشاء عملية تجارية تقوم بما يلي:

  • يتلقى عنوان الكتاب كمدخل.
  • يحدد الفئة (النوع) التي ينتمي إليها.
  • إرجاع 3 كتب عشوائية من نفس الفئة كنتيجة (في هذه الحالة، يجب ألا يكون الكتاب المطلوب بينهم)

وللقيام بذلك، سنقوم بإنشاء عملية أعمال جديدة تجمع بين البحث باستخدام الكتل القياسية واستخدام استعلامات SQL.

الجزء الأول هو العثور على كتاب حسب عنوانه، وكذلك تحديد الفئات التي ينتمي إليها. للقيام بذلك، نستخدم كتلة البحث مع المعلمات التالية:

  • _With = الفئات - بالإضافة إلى الكتاب نفسه، تتطلب نتيجة الاستعلام معلومات من جدول الفئات المرتبط.
  • _الحد = 1 - يجب العثور على كتاب واحد فقط.
  • _Ilike = False - يجب أن يتطابق الاسم تمامًا مع الاسم المطلوب.
  • الاسم - فهرس عنوان الكتاب، الذي تم تمريره من كتلة البداية.

باستخدام كتلة Array Element ذات الفهرس 0، نأخذ الكتاب الأول (والوحيد) من النتيجة.

يمكن أن ينتمي الكتاب إلى عدة فئات مختلفة في نفس الوقت، وفي هذه الحالة يناسبنا أي منها. يمكن اختياره عشوائيًا باستخدام كتلة العناصر العشوائية

بعد ذلك تكون لدينا كافة البيانات اللازمة، وكل ما تبقى هو إنشاء الطلب نفسه، والذي قد يبدو بهذا الشكل:

SELECT * FROM public.book WHERE id IN (SELECT rel1_id FROM public.book_categorys_category_books_pivot WHERE book_categorys_category_books_pivot.rel2_id = X) والمعرف <> Y بالترتيب حسب عشوائي () LIMIT 3

حيث X هو معرف فئة الكتاب، وY هو معرف الكتاب نفسه.

يرجى ملاحظة أن هذا الاستعلام يتضمن استعلام فرعي. أولاً، من جدول book_categorys_category_books_pivot (يتم استخدامه لتخزين معلومات حول العلاقات بين جدولين)، تم العثور على جميع معرفات الكتب المقابلة للفئة المحددة. بعد ذلك، يتم تنفيذ استعلام للعثور على 3 كتب عشوائية تتطابق مع النطاق المحدد، باستثناء معرف الكتاب، الذي تم تمرير عنوانه في الأصل إلى عملية الأعمال.

للحصول على دراسة أكثر تفصيلاً لبنية قاعدة بيانات المشروع، يمكنك استخدام زر فتح قاعدة البيانات في إعدادات نشر الخطط.

سيسمح لك بفتح قاعدة البيانات في المحرر والحصول على وصول مباشر لعرض البيانات وتحريرها. ومع ذلك، يجب أن تكون حذرا وتأخذ في الاعتبار حقيقة أن تغيير بنية البيانات نفسها في المحرر سيجعل من المستحيل مواصلة نشر المشروع.

دعنا نعود إلى إنشاء عملية تجارية. من الضروري إكمال تجميع الطلب وللقيام بذلك، قم بتحويل معرف الكتاب والفئة من عدد صحيح إلى سلسلة وأيضًا تجميع الطلب النهائي باستخدام كتلة Concat Strings (متعددة).

الخطوة الأخيرة هي تنفيذ الاستعلام، وتحويل النتيجة إلى نموذج، وإرسالها إلى كتلة النهاية كنتيجة للاستعلام.

no-code

يمكنك حفظ تغييراتك وإنشاء نقطة نهاية ونشر مشروعك والتحقق من أن الطلب يعمل بشكل صحيح. في هذه الحالة، تم استخدام كتلة SQL Exec واحدة مع استعلام مركب معقد لاستبدال العديد من الكتل الأخرى وتبسيط بنية عملية الأعمال.

لا يقتصر استخدام كتلة SQL Exec على استرداد البيانات ويمكن استخدامه في مجموعة واسعة من السيناريوهات. دعونا نلقي نظرة فاحصة على بعض الخيارات الإضافية.

  • حساب عدد التعليقات لكتاب بالمعرف=X
    حدد COUNT(id) من public.comment حيث book_id = X
  • حساب متوسط ​​تقييم الكتاب مع الأخذ في الاعتبار جميع التقييمات الواردة في التعليقات:
    حدد AVG(rate) من public.comment حيث book_id = X
  • حذف جميع التعليقات المكتوبة قبل عام 2023 (يمكن استخدامه، على سبيل المثال، لمسح السجل بسرعة).
    احذف * من التعليق العام حيث تم إنشاؤه < '2023-01-01'

في الختام، تجدر الإشارة إلى أنه لتحسين الأمان، تمت إضافة عامل تصفية إلى كتلة SQL Exec للعمليات الخطيرة التي يمكن أن تؤدي إلى تغييرات في المخطط.

يتم تعطيل CREATE/ALTER/DROP/TRUNCATE for TABLE|COLUMN|INDEX|CONSTRAINT|SEQUENCE|SCHEMA|DATABASE بواسطة عامل التصفية إذا كان التطبيق مستضافًا على خوادم AppMaster. عند الاستضافة محليًا - بشكل افتراضي، تتوفر أي طلبات دون قيود.

Was this article helpful?

AppMaster.io 101 حلقة دراسية مكثفة

10 وحدات
2 أسابيع

لست متأكدا من أين تبدأ؟ ابدأ في الدورة التدريبية المكثفة للمبتدئين واستكشف AppMaster من الألف إلى الياء.

ابدأ الدورة
Development it’s so easy with AppMaster!

هل تريد المزيد من المساعدة؟

حل أي مشكلة بمساعدة خبرائنا. وفر الوقت وركز على بناء تطبيقاتك.

headphones

اتصل بالدعم

أخبرنا عن مشكلتك ، وسنجد لك حلاً.

message

دردشة المجتمع

ناقش الأسئلة مع مستخدمين آخرين في محادثتنا.

الانضمام إلى المجتمع