Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon كيف يختلف Morphtomany عن morphedbymany من حيث بنية قاعدة البيانات


كيف يختلف Morphtomany عن morphedbymany من حيث بنية قاعدة البيانات


إن الفرق بين "morphtomany" و "Morphedbymany" في العلاقات المتعددة الأشكال العديدة تكمن في أدوارهم في العلاقة وكيف تدعمهم هيكل قاعدة البيانات.

هيكل قاعدة البيانات في العديد من الأشكال إلى حد كبير

تتضمن العلاقات المتعددة الأشكال التي تتضمنها العديد من الجداول الرئيسية:

- جدولين من طرازات (على سبيل المثال ، "المنشورات" و "العلامات")
- جدول محور واحد وسيط (على سبيل المثال ، `taggables`)

يحتوي الجدول المحوري على ثلاثة أعمدة على الأقل:

- `tag_id` (معرف النموذج ذي الصلة ، على سبيل المثال ، علامة)
- `taggable_id` (معرف النموذج المرتبط بالعلامة ، على سبيل المثال ، النشر أو الفيديو)
- `taggable_type` (اسم الفئة أو نوع النموذج ذي الصلة ، على سبيل المثال ،` app \ models \ post` أو `app \ models \ video`)

يسمح هذا الهيكل بجدول محوري واحد لربط نماذج مختلفة متعددة بنموذج مشترك (علامات في هذه الحالة) دون الحاجة إلى جداول محورية منفصلة لكل مجموعة نموذج [5] [9].

دور "morphtomany"

- يستخدم على النموذج الذي "يمتلك" أو "له" العلاقة المتعددة الأشكال.
- يحدد العلاقة من منظور النموذج المرتبط بالعديد من النماذج الأخرى.
- على سبيل المثال ، في نموذج "post" ، تستخدم طريقة "العلامات ()" morphtomany "للحصول على جميع العلامات المرتبطة بهذا المنشور.
- تحدد هذه الطريقة النموذج ذي الصلة و "اسم مورف" (على سبيل المثال ، "Taggable") ، والذي يتوافق مع أعمدة الجدول المحوري (`taggable_id` و` taggable_type`).
- يستفسر من تصفية جدول المحور بواسطة معرف النموذج الحالي ونوعه للعثور على النماذج ذات الصلة [5] [9].

دور "morphedbymany"

- يستخدم في النموذج الذي هو هدف العلاقة المتعددة الأشكال.
-يحدد الجانب العكسي لعلاقة العديد من الأشكال.
- على سبيل المثال ، في نموذج "العلامة" ، أساليب مثل "المشاركات ()" أو "مقاطع الفيديو ()" استخدم "morphedbymany" للحصول على جميع المنشورات أو مقاطع الفيديو المرتبطة بهذه العلامة.
- يحدد فئة النموذج ذات الصلة ونفس اسم التشكل المستخدم في "morphtomany".
- يستفسر هذه الطريقة من تصفية الجدول المحوري حسب نوع ومعرف النموذج ذي الصلة للعثور على جميع النماذج من هذا النوع المرتبط بالنموذج الحالي (TAG) [5] [9].

ملخص الاختلافات في شروط قاعدة البيانات

- "morphtomany" يسمى النموذج المرتبط بالعديد من الآخرين ، ويستخدم أعمدة الجدول المحوري `taggable_id` و` taggable_type` لتصفية السجلات حيث يتطابق `taggable_type` مع فئة النموذج الحالي.
- يتم استدعاء "morphedbymany" على النموذج الذي يرتبط (العكس) ، ويستخدم الجدول المحوري للعثور على جميع النماذج من نوع معين يرتبط بالنموذج الحالي.

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

في جوهره ، يحدد "morphtomany" العلاقة من جانب "الوالد" أو "امتلاك" ، في حين يحدد "morphedbymany" العلاقة العكسية من الجانب النموذجي "ذي الصلة" ، وكلاهما يعتمد على هيكل الجدول المحوري متعدد الأشكال [5] [1] [1].

الاستشهادات:
[1] https://laracast.com
[2]
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-relableds
[4] https://laracast.com
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplify-many-to-many-relationships-with-laravel-polymorphic
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-relationship-pivot-table-with-relationship-to-a
[9] https://blog.logbrocket.com/polymorphic--relationships-laravel/