إحدى نقاط القوة في 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