اذهب إلى المحتوى
  • 0

اضافة تصنيفات على منشور

علي العبدالله

السؤال

ماهي آلية عمل التصنيفات التي تكون علاقتها Many To Many

مثلاً لدي بوستات

والبوستات تنتمي الى تصنيف الرياضة وتصنيف الصحة 

image.png.85dca982573d7f7a1e2d9b27db198f3b.png

 

كيف تعمل هذي في الفرونت والباك اند ؟

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يحدث هذا بوساطة جداول، بحيث يكون هنالك جدول وسيط pivot table يمتلك عمودين أجنبيين كل منهما يمثل عمود id من أحد الجدولين بحيث تكون كل ثنائية من هذين العمودين هي ثنائية فريدة. عدد السجلات في هذا الجدول هو ما يمثل عدد العلاقات. 

مثال عملي: 

  • ننشئ جدول post_category_table
  • يحوي هذا الجدول عمودين post_id و category_id
  • كل ثنائية post_id, category_id هي ثنائية فريدة
  • الآن لما نحاول تصنيف منشور في عدة تصنيفات نقوم بـإنشاء عدة سجلات كل منها يحمل post_id المنشور وcategory_id الفئة المستهدفة.

طريقة القراءة:

  • طريقة جلب تصنيفات المنشور تكون بقراءة قيم category_id التي نجلبها من سجلات هذا الجدول الوسيط التي فيها قيمة post_id تساوي قيمة معرف هذا المنشور.
  • طريقة جلب منشورات تصنيف معين تكون بقراءة قيم post_id التي نجلبها من سجلات هذا الجدول الوسيط التي فيها قيمة category_id تساوي قيمة معرف هذه الفئة.

في لارافيل مثلا، يتم ذلك بشكل تلقائي عند إنشاء pivot table يتبع هاته الطريقة في التسمية، يتم تصريح تابعين باسم categories و posts في نموذجي Post و Category على التوالي: 

public function categories(){
    return $this->hasMany(Category::class);
}

..
public function posts(){
    return $this->hasMany(Post::class);
}

أما على مستوى الواجهة الأمامية، فيمكنك لعمل مثل هاته النمذجة استعمال مكتبة مثل tags input. 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

لإنشاء آلية تصنيف Many-to-Many بين المنشورات والتصنيفات في تطبيق الويب يتوجب علينا التالي:

1- قاعدة البيانات

  • إنشاء جدول للمنشورات (Posts) وجدول للتصنيفات (Categories).
  • لإنشاء العلاقة Many-to-Many، تستطيع إنشاء جدول وسيط (Intermediate table) يربط بين المنشورات والتصنيفات، والجدول يحتوي على مفتاح أساسي خارجي للمنشور (post_id) ومفتاح أساسي خارجي للتصنيف (category_id).

2- الجانب الخلفي (Backend)

  • في الجانب الخلفي، يجب عليك تنفيذ نماذج (models) لكل جدول في قاعدة البيانات.
  • في نموذج المنشور (Post model)، تستطيع استخدام علاقة Many-to-Many مع نموذج التصنيف (Category model) باستخدام وسيط مثل Django's ManyToManyField أو أي أداة مشابهة، وذلك الحقل سيقوم بإنشاء العلاقة بشكل تلقائي بين المنشورات والتصنيفات.
  • في النهاية، يجب عليك إنشاء نقاط نهاية API (API endpoints) لإنشاء وتحديث وحذف المنشورات والتصنيفات.

3- الجانب الأمامي (Frontend)

  • في الواجهة الأمامية، عليك عرض نموذج لإنشاء منشور جديد يتيح للمستخدم اختيار التصنيفات المناسبة للمنشور.
  • ومن الممكن أن تعتمد على حقل اختيار متعدد (multi-select field) أو حقل تصنيفات منفصل (separate category fields) حسب التصميم الذي ترغب فيه.
  • عند إرسال البيانات إلى الخادم، قم بتضمين معرفات التصنيفات المختارة للمنشور في طلب الإنشاء أو التحديث.

وباستخدام تلك الآلية، يمكن للمنشورات أن تنتمي إلى العديد من التصنيفات والتصنيفات يمكن أن تحتوي على العديد من المنشورات، وتأكد من تحديث العلاقات بشكل صحيح عند إنشاء وتحديث المنشورات والتصنيفات لضمان الاتصال الصحيح بينهما في قاعدة البيانات.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

عندما تكون العلاقة بين كيانين Many To Many، يتم تنفيذها في Laravel عادةً باستخدام جدول وسيط.

على سبيل المثال:

لدينا كيان Post وكيان Category

سنحتاج إلى إنشاء جدول وسيط باسم post_category

والذي سيحتوي على حقلين: post_id و category_id

في الموديل Post:

public function categories() 
{
  return $this->belongsToMany(Category::class);
}

في الموديل Category:

public function posts()
{
  return $this->belongsToMany(Post::class); 
}

ثم يمكنك الوصول إلى العلاقة من أي موديل:

$post = Post::find(1);

foreach ($post->categories as $category) {
  //
}

$category = Category::find(1);

foreach ($category->posts as $post) {
  // 
}

ولحفظ العلاقة:
 

$post = Post::find(1);

$category = Category::find(2);

$post->categories()->attach($category);

هذا الكود سيقوم بإضافة سجل جديد في جدول الوسيط post_category لربط البوست والتصنيف.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...