"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > **وراثة الجدول الواحد مقابل توريث الجداول المتعددة مع Eloquent: ما هو المناسب لتطبيق Laravel الخاص بك؟**

**وراثة الجدول الواحد مقابل توريث الجداول المتعددة مع Eloquent: ما هو المناسب لتطبيق Laravel الخاص بك؟**

تم النشر بتاريخ 2024-11-15
تصفح:427

**Single Table Inheritance vs. Multi Table Inheritance with Eloquent: Which is Right for Your Laravel Application?**

تنفيذ الوراثة في جدول واحد باستخدام Eloquent من Laravel

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

وراثة الجدول الواحد

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

وراثة الجداول المتعددة مع Eloquent

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

نموذج النشر

تمثل الفئة الأساسية لجميع أنواع المنشورات، Post، الأعمدة المشتركة وتحدد قابلة للنشر علاقة متعددة الأشكال:

class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}

نماذج الأسئلة/المقالات

كل نوع منشور محدد، مثل السؤال أو المقالة، يمتد من المنشور ويحدد علاقة morphOne مع النموذج الأساسي:

class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}

أمثلة الاستخدام

    استرداد جميع المشاركات:
  • $posts = Post::all();
  • استرجاع كافة الأسئلة:
  • $questions = Question::all();
  • استرجاع عمود خاص بالسؤال من منشور:
  • $question_column = $post->postable->question_column;
  • تحقق من نوع المنشور:
  • echo 'Type: '.get_class($post->postable);
إنشاء سؤال جديد

إنشاء سؤال جديد يتطلب ربطه إلى جدول النشر للحفاظ على وراثة الجداول المتعددة:

$post = new Post(); $post->shared_column = 'مشاركة سؤال جديدة'; $post->save(); $question = سؤال جديد(); $question->question_column = 'سؤالي'; $سؤال->حفظ(); $question->post()->save($post);
$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'My Question';
$question->save();

$question->post()->save($post);

للحصول على دروس شاملة حول وراثة الجداول المتعددة في Laravel، راجع الموارد المتوفرة في إجابة السؤال الأصلي.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3