سؤال

إذا كان لدي نموذج Eloquent محدد في تطبيقي والذي يحتوي على عدد من العلاقات المختلفة التي تم إعدادها مع أنواع نماذج أخرى، فكيف يمكنني الحصول على معلومات عن كل تلك العلاقات دون معرفة أي شيء آخر عن النموذج الذي أتعامل معه؟

على سبيل المثال، تخيل نموذج معاملة بسيطًا يمكن أن يحتوي على العديد من الخطوط وينتمي أيضًا إلى مستخدم واحد.

الآن، في ضوء مثيل لنموذج المعاملة (إما مأهول أو غير مأهول)، كيف يمكنني معرفة العلاقات التي تربطه بالنماذج الأخرى؟

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

أي نصيحة موضع تقدير.

شكرًا

هل كانت مفيدة؟

المحلول

لا تعمل نماذج Laravel البليغة بهذه الطريقة، حيث يتم تعريف العلاقات من خلال طرق داخل النموذج ولا يتم تحميلها تلقائيًا بواسطة النموذج عند إنشاء مثيل، ومن هنا ضرورة استدعاء هذه الطرق فعليًا عندما تريد استخدام علاقة معينة.

عند إنشاء فئة نماذج، لا يتم تحديد أي علاقات.ويمكن إظهار ذلك من خلال ما يلي:

$user = new User();

print_r($user->getRelations());

//Output : empty array

كما ترون، فإن النموذج غير مدرك تمامًا لأي علاقات قد يعلن عنها أو لا يعلن عنها في طرق العلاقات.عند استدعاء علاقة النماذج:

$user = new User();

$user->find(1)->roles()->get();

يقوم Eloquent بتعيين العلاقة على النموذج باستخدام إحدى الطرق setRelation($relation, $value) يأخذ اسم الطريقة التي تسمى بالوسيطة الأولى وإرجاع تلك الطريقة كالوسيطة الثانية.وبالتالي توفير سياق العلاقة غير الموجودة قبل أن تطلبها على وجه التحديد.

أعلم أن هذا ليس ما تأمل أن تسمعه ولكن لا توجد طريقة للقيام بذلك مع Eloquent.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top