Relared Books

الكتب المتعلقة من خلال هذا الكود:

  useEffect(() => {
  if (!book) return;   //  هذا هو السر

  const fetchRelated = async () => {
    const categoryId = book.categories?.[0]?.id;

    if (!categoryId) return;

    const res = await api.get(
      `/books?filters[categories][id][$eq]=${categoryId}&filters[id][$ne]=${book.id}&populate=*&pagination[limit]=2`
    );

    setRelatedBooks(res.data.data);
  };

  fetchRelated();
}, [book]);
Bash

🧠 أولاً: الرابط الكامل

/books?filters[categories][id][$eq]=${categoryId}&filters[id][$ne]=${book.id}&populate=*
Bash

هذا يسمى:

⭐ Strapi REST Query Filters

وهو نظام فلترة جاهز داخل Strapi.

🎯 الهدف من هذا الرابط

نريد:

👉 كتب لها نفس التصنيف
👉 بدون الكتاب الحالي
👉 مع جلب الصور والعلاقات

🧩 الآن نشرحه جزء جزء
✅ الجزء 1

/books

يعني:

👉 جلب كل الكتب

مثل:

SELECT * FROM books
Bash
✅ الجزء 2

?

هذا يعني:

👉 بداية Query Parameters

أي نبدأ إضافة شروط.

✅ الجزء 3 (الأهم)
filters[categories][id][$eq]=${categoryId}

هذا هو الشرط الأساسي.

لنقسّمه:

🔹 filters

تعني:

👉 نريد فلترة النتائج

🔹 [categories]

يعني:

👉 الفلترة على علاقة اسمها categories

(وهي relation في Strapi)

🔹 [id]

يعني:

👉 استخدم id داخل categories

🔹 [$eq]

تعني:

👉 Equal = يساوي

🔹 ${categoryId}

هو الرقم الحقيقي.

مثلاً:

2
Bash
⭐ ماذا يعني كل هذا معاً؟
أعطني الكتب التي لديها تصنيف id = 2
Bash

مثل SQL:

WHERE category_id = 2
Bash
✅ الجزء 4

&

يعني:

👉 إضافة شرط آخر

✅ الجزء 5

filters[id][$ne]=${book.id}

هذا الشرط الثاني.

🔹 filters[id]

يعني:

👉 فلترة حسب id الكتاب نفسه

🔹 [$ne]

تعني:

👉 Not Equal = لا يساوي

🔹 ${book.id}

هو id الكتاب الحالي.

⭐ ماذا يعني هذا؟
لا تجلب الكتاب الحالي
Bash

مثل SQL:

AND id != 5
Bash
✅ الجزء 6

&populate=*

يعني:

👉 جلب العلاقات مع الكتاب.

مثل:

  • الصورة
  • التصنيفات
  • الجالري

بدونها سترى:

image: null
Bash
🧠 ترجمة الرابط بالكامل بلغة بشرية

يعني:

أعطني كل الكتب التي:

  • لها نفس التصنيف
  • وليست نفس الكتاب الحالي
  • مع جلب الصور والعلاقات
🎯 مثال عملي حقيقي

لو:

categoryId = 2
book.id = 7
Bash

سيصبح الرابط:

/books?filters[categories][id][$eq]=2&filters[id][$ne]=7&populate=*
Bash
🧩 ماذا يرجع Strapi؟

سيعيد مثلاً:

[
 { id: 3, name: "Book A" },
 { id: 8, name: "Book B" }
]
Bash
🚀 شرح رموز الفلترة في Strapi
الرمزالمعنى
$eqيساوي
$neلا يساوي
$inضمن مجموعة
$containsيحتوي نص
$gtأكبر من
$ltأصغر من
⭐ مثال متقدم

لو أردت جلب كتب من عدة تصنيفات:

filters[categories][id][$in]=1,2,3
Bash
🏆 الخلاصة

الرابط يتكون من 3 شروط:

1️⃣ فلترة حسب التصنيف
2️⃣ استثناء الكتاب الحالي
3️⃣ جلب العلاقات