الكتب المتعلقة من خلال هذا الكود:
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 booksBash✅ الجزء 2
?
هذا يعني:
👉 بداية Query Parameters
أي نبدأ إضافة شروط.
✅ الجزء 3 (الأهم)
filters[categories][id][$eq]=${categoryId}
هذا هو الشرط الأساسي.
لنقسّمه:
🔹 filters
تعني:
👉 نريد فلترة النتائج
🔹 [categories]
يعني:
👉 الفلترة على علاقة اسمها categories
(وهي relation في Strapi)
🔹 [id]
يعني:
👉 استخدم id داخل categories
🔹 [$eq]
تعني:
👉 Equal = يساوي
🔹 ${categoryId}
هو الرقم الحقيقي.
مثلاً:
2Bash⭐ ماذا يعني كل هذا معاً؟
أعطني الكتب التي لديها تصنيف id = 2Bashمثل SQL:
WHERE category_id = 2Bash✅ الجزء 4
&
يعني:
👉 إضافة شرط آخر
✅ الجزء 5
filters[id][$ne]=${book.id}
هذا الشرط الثاني.
🔹 filters[id]
يعني:
👉 فلترة حسب id الكتاب نفسه
🔹 [$ne]
تعني:
👉 Not Equal = لا يساوي
🔹 ${book.id}
هو id الكتاب الحالي.
⭐ ماذا يعني هذا؟
لا تجلب الكتاب الحاليBashمثل SQL:
AND id != 5Bash✅ الجزء 6
&populate=*
يعني:
👉 جلب العلاقات مع الكتاب.
مثل:
- الصورة
- التصنيفات
- الجالري
بدونها سترى:
image: nullBash🧠 ترجمة الرابط بالكامل بلغة بشرية
يعني:
أعطني كل الكتب التي:
- لها نفس التصنيف
- وليست نفس الكتاب الحالي
- مع جلب الصور والعلاقات
🎯 مثال عملي حقيقي
لو:
categoryId = 2
book.id = 7Bashسيصبح الرابط:
/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,3Bash🏆 الخلاصة
الرابط يتكون من 3 شروط:
1️⃣ فلترة حسب التصنيف
2️⃣ استثناء الكتاب الحالي
3️⃣ جلب العلاقات