إحدى نقاط قوة Laravel هي تركيبها الأنيق. إذا كان لديك الكثير من النماذج والعلاقات في Laravel (بسبب وجود الكثير من الجداول في قاعدة البيانات)، فقد ينتهي الاجتياز غالبًا بكود برمجي أقل أناقة. مع مرور الوقت، أثبتت ثلاث ملحقات صغيرة نجاحها بالنسبة لي، والتي أود أن أعرضها بإيجاز أدناه. للقيام بذلك نستخدم فقط بعض الميراث والأساليب السحرية والمجموعات المخصصة.
أولاً ، نقوم بإنشاء نموذج جديد ضمن app \ ConvenienceModel.php:
b45e29b9125c2ab565b5526442437686
ثم تركنا جميع النماذج ترث من نموذجنا الجديد ConvenienceModel:
b45e29b9125c2ab565b5526442437686
امزج وظائفك مع العلاقات
إذا كنت ترغب في الحصول على نماذج متصلة ، يمكنك استخدام البنية القياسية للاتصال بها:
b45e29b9125c2ab565b5526442437686
إذا أضفت الآن منطق العمل الخاص بك ، فأنت ترغب في استخدام تدوين حالة الجمل (السفلي):
b45e29b9125c2ab565b5526442437686
نريد توحيد بناء الجملة لكلا المتغيرين. للقيام بذلك ، نضيف الطريقة السحرية __call إلى ConvenienceModel:
b45e29b9125c2ab565b5526442437686
هذه المكالمة ممكنة أيضًا في المثال أعلاه:
b45e29b9125c2ab565b5526442437686
تحقق من الأشياء الفارغة
إذا كنت ترغب في عرض اسم البلد لعنوان شخص ما، فغالبًا ما سترى الكود التالي:
b45e29b9125c2ab565b5526442437686
ولمنع ذلك، نقوم بتضمين مكتبة stringhelper ونعيد كائنًا خاصًا من الفئة الفارغة `empty` إذا لم يتم العثور على نموذج.:
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