حيل لعلاقات Laravel Eloquent

إحدى نقاط القوة في Laravel هي البنية الأنيقة. إذا كان لديك الكثير من النماذج والعلاقات في Laravel (بسبب الكثير من الجداول في قاعدة البيانات) ، يمكن أن ينتهي العبور في كثير من الأحيان بتعليمات برمجية أقل أناقة. مع مرور الوقت ، أثبتت ثلاثة امتدادات صغيرة نفسها بالنسبة لي ، والتي أود أن أعرضها بإيجاز أدناه. نحن نستخدم فقط بعض طرق التوريث والسحر والمجموعات المخصصة.


أولاً ، نقوم بإنشاء نموذج جديد ضمن app \ ConvenienceModel.php:

b45e29b9125c2ab565b5526442437686

ثم تركنا جميع النماذج ترث من نموذجنا الجديد ConvenienceModel:

b45e29b9125c2ab565b5526442437686

امزج وظائفك مع العلاقات

إذا كنت ترغب في الحصول على نماذج متصلة ، يمكنك استخدام البنية القياسية للاتصال بها:

b45e29b9125c2ab565b5526442437686

إذا أضفت الآن منطق العمل الخاص بك ، فأنت ترغب في استخدام تدوين حالة الجمل (السفلي):

b45e29b9125c2ab565b5526442437686

نريد توحيد بناء الجملة لكلا المتغيرين. للقيام بذلك ، نضيف الطريقة السحرية __call إلى ConvenienceModel:

b45e29b9125c2ab565b5526442437686

لذلك فإن هذه الدعوة ممكنة أيضًا في المثال أعلاه:

b45e29b9125c2ab565b5526442437686

تحقق من الأشياء الفارغة

إذا كنت تريد إخراج اسم البلد إلى عنوان شخصي ، فغالبًا ما ترى الرمز التالي:

b45e29b9125c2ab565b5526442437686

لمنع هذا ، نقوم بتضمين مكتبة stringhelper وإرجاع كائن خاص للفئة الفارغة فارغة إذا لم يتم العثور على نموذج:

b45e29b9125c2ab565b5526442437686

هذا أيضًا يجعل المكالمة ناجحة (في هذا المثال ، إذا تم العثور على شيء ما ، فإن اسم البلد هو الإخراج ، وفي جميع الحالات الأخرى سلسلة فارغة)

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

وبالتالي فإن الاستدعاء التالي يسلم سلسلة فارغة حتى لو لم يكن المستخدم موجودًا على الإطلاق:

b45e29b9125c2ab565b5526442437686

اجتياز علاقات n: m بسهولة

أخيرًا ، نريد تبسيط الكود التالي:

b45e29b9125c2ab565b5526442437686

لهذا نستخدم إمكانية المجموعات المخصصة . نقوم أولاً بتوسيع نموذج الراحة:

b45e29b9125c2ab565b5526442437686

ثم نقوم بإنشاء ملف app \ Helpers \ ConvenienceCollection.php ، والذي يضمن أن استدعاء وظائف غير معروفة في المجموعات يؤدي إلى تنفيذ الوظيفة لجميع العناصر في المجموعة:

b45e29b9125c2ab565b5526442437686

لذلك يمكننا استخدام الكود التالي لإخراج جميع أسماء جميع البلدان من جميع عناوين جميع أولياء أمور الشخص:

b45e29b9125c2ab565b5526442437686

لكن من الممكن أيضًا إجراء مكالمات مثل ما يلي:

b45e29b9125c2ab565b5526442437686

فرز حسب عدة أعمدة

يتم فرز المكالمة التالية حسب الموقع فقط ، على الرغم من أن هذا ربما لم يكن ما تريده:

b45e29b9125c2ab565b5526442437686

لتمكين الفرز وفقًا لعدة أعمدة ، نقوم بتوسيع مجموعة ConvenienceCollection الخاصة بنا:

b45e29b9125c2ab565b5526442437686

مع ذلك يمكننا فرز المجموعة وفقًا لعدة أعمدة:

b45e29b9125c2ab565b5526442437686

الفرز القياسي

نحن نعمل على توسيع مجموعة ConvenienceCollection بوظيفة مساعدة أخرى:

b45e29b9125c2ab565b5526442437686

الآن يمكنك إعطاء كل نموذج وظيفة فرز قياسية فردية:

b45e29b9125c2ab565b5526442437686

مع هذا يمكننا فرز مجموعة مع:

b45e29b9125c2ab565b5526442437686

أسماء الكائنات

يطبق كل نموذج طريقة getLabel (يختلف getName وفقًا للطراز):

b45e29b9125c2ab565b5526442437686

باستخدام هذا يمكنك عرض اسم الكائن بسرعة وسهولة. يمكنك بعد ذلك تنفيذ التابع sortByLabel المساعد في ConvenienceCollection:

b45e29b9125c2ab565b5526442437686

نتائج فارغة

إذا كانت الخطوة الوسيطة فارغة ، فإن دالات Laravel أولاً () والأخير () تعيد الصفر عادةً. لذلك نقدم getFirst () و getLast () حتى تنجح المكالمة التالية دائمًا:

b45e29b9125c2ab565b5526442437686

بهذا نعيد مساعد __empty_ الذي يتعرف عليه __x:

b45e29b9125c2ab565b5526442437686

عودة