يوفر AppMaster إمكانات واسعة النطاق للعمل مع قاعدة البيانات. على سبيل المثال، باستخدام كتلة البحث، يمكنك العثور على البيانات الضرورية، وإرفاق الجداول ذات الصلة بها، وفرزها بالترتيب الصحيح، وما إلى ذلك. ومع ذلك، في مواقف معينة، قد لا يكون هذا كافيًا، ثم تأتي كتلة SQL Exec إلى الإنقاذ. يسمح لك بتشغيل أي استعلامات قاعدة بيانات باستخدام القوة الكاملة لـ SQL.
لنفكر في تشغيل الكتلة باستخدام مثال قاعدة البيانات التي تحتوي على كتالوج الكتب.
دعونا نقوم ببعض الأعمال التحضيرية. من الضروري إنشاء عملية تجارية تسمح، في أبسط أشكالها، بإرسال الطلبات وكذلك تلقي نتائجها.
ستحتاج أيضًا إلى إنشاء نقطة نهاية تسمح لك بالوصول إلى عملية الأعمال هذه.
في المرحلة الأولية، ينبغي أن يكون هذا كافيا. يمكنك نشر طلبك والانتقال إلى الاختبار. لهذا، من المريح جدًا استخدام Swagger، الذي يتم إنشاؤه تلقائيًا عند النشر.
نستخدم استعلامًا بسيطًا يجب أن يطلب جميع الكتب من قاعدة البيانات.
اختر * من public.book
يرجى ملاحظة أن الجدول نفسه (مثل كافة الجداول الأخرى التي تم إنشاؤها في محرر قاعدة البيانات) يحتوي على بادئة تشير إلى المخطط - عام.
يمكنك التحقق من إتمام الطلب بنجاح واستلام النتيجة.
لكن المشكلة تكمن في أنه من الصعب جدًا إدراك الإجابة بهذا الشكل. الحل المحتمل هو تعديل الطلب قليلاً وترك الحقول الضرورية فيه فقط، على سبيل المثال، عنوان الكتاب وعدد الصفحات. بالإضافة إلى ذلك، سيكون من المعقول تعيين حد، وليس طلب جميع الكتب من قاعدة البيانات، ولكن يقتصر على عشرة.
حدد الاسم، الصفحات من public.book LIMIT 10
أفضل بكثير، لكنه لا يزال غير مناسب للاستخدام الحقيقي. بعد كل شيء، في عملية الأعمال، لا تحتاج فقط إلى تلقي طلب، بل تحتاج أيضًا إلى القيام بشيء ما بنتيجته. لهذا، لا يكفي أن تكون النتيجة في شكل نص؛ تحتاج إلى تحويله إلى نموذج مناسب لمزيد من الاستخدام.
للقيام بذلك، دعونا نعود إلى عملية الأعمال ونحسنها قليلاً. في الكتلة النهائية، سنضيف متغيرًا جديدًا - مجموعة من نماذج الكتب.
ستحتاج أيضًا إلى كتلة تقوم بتحويل JSON المستلم نتيجة الطلب إلى نموذج. إلغاء تسلسل JSON إلى النموذج.
دعونا نكرر الطلب السابق ونتأكد من أن النتيجة أصبحت أكثر ملاءمة، سواء للإدراك البصري أو لمزيد من الاستخدام في BP.
والآن يمكننا الانتقال إلى منطق أكثر تعقيدًا. لنقم بإنشاء عملية تجارية تقوم بما يلي:
- يتلقى عنوان الكتاب كمدخل.
- يحدد الفئة (النوع) التي ينتمي إليها.
- إرجاع 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 (متعددة).
الخطوة الأخيرة هي تنفيذ الاستعلام، وتحويل النتيجة إلى نموذج، وإرسالها إلى كتلة النهاية كنتيجة للاستعلام.
يمكنك حفظ تغييراتك وإنشاء نقطة نهاية ونشر مشروعك والتحقق من أن الطلب يعمل بشكل صحيح. في هذه الحالة، تم استخدام كتلة 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. عند الاستضافة محليًا - بشكل افتراضي، تتوفر أي طلبات دون قيود.