"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فرز الصفوف ذات القيم الفارغة في الأسفل والقيم غير الفارغة بترتيب تنازلي في Laravel

فرز الصفوف ذات القيم الفارغة في الأسفل والقيم غير الفارغة بترتيب تنازلي في Laravel

تم النشر بتاريخ 2024-11-06
تصفح:745

Sorting Rows with Empty Values at the Bottom and Non-Empty Values in Descending Order in Laravel

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

سيناريو

لنفترض أن لديك جدولًا بالمشاركين في أحد الأنشطة، وقد يكون لدى كل مشارك أو لا يكون لديه طابع زمني حضر_في، والذي يسجل وقت حضور المشارك للنشاط. تريد إدراج جميع المشاركين وفرزهم بطريقة:

  • يظهر المشاركون الذين حضروا (أي أن الحضور ليس فارغًا) أولاً، ويتم فرزهم حسب الحضور الأحدث.
  • المشاركين الذين لم يحضروا (أي الحضور_فارغ أو NULL) يظهرون أخيرًا.

المشكلة

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

return $this
    ->participants()
    ->with('user')
    ->latest('attended_at')
    ->get();

سيتم ترتيب المشاركين بطابع زمني، لكنه لن ينقل القيم الخالية إلى الأسفل.

الحل: استخدام orderByRaw

يمكننا تحقيق الفرز المطلوب باستخدام طريقة orderByRaw(). يتيح لنا ذلك كتابة منطق فرز مخصص باستخدام تعبيرات SQL الأولية. في هذه الحالة، سنرتب حسب ما إذا كان Attend_at هو NULL، ثم نرتب حسب Attend_at بترتيب تنازلي للقيم غير NULL.

إليك كيفية كتابة هذا الاستعلام في Laravel:

return $this
    ->participants()
    ->with('user')
    ->orderByRaw('attended_at IS NULL, attended_at DESC')
    ->get()
    ->map(function (ActivityParticipant $participant) {
        return [
            'metric_number' => data_get($participant, 'user.student_id'),
            'name' => data_get($participant, 'user.name'),
            'status' => data_get($participant, 'status'),
            'attended_at' => data_get($participant, 'attended_at', '-'),
        ];
    })->toArray();

كسر الاستعلام

  • orderByRaw('attending_at IS NULL، Attend_at DESC'):
    • Attend_at IS NULL: سيعيد هذا صحيحًا (أو 1) للصفوف التي يكون Attend_at فيها NULL وخطأ (أو 0) بخلاف ذلك. يؤدي هذا إلى وضع القيم الخالية في الأسفل بشكل فعال.
    • Attend_at DESC: بعد التعامل مع القيم NULL، يؤدي هذا إلى فرز الصفوف المتبقية بقيم Attend_at غير الفارغة بترتيب تنازلي، مما يعني أنه سيتم عرض أحدث حضور أولاً.

الناتج النهائي

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

فوائد هذا النهج

  • الأداء: يعمل هذا الأسلوب على تعزيز قدرات الفرز في SQL، مما يجعلها فعالة لمجموعات البيانات الكبيرة.
  • قابلية القراءة: استخدام orderByRaw() مع تعبير SQL أولي يبقي التعليمات البرمجية موجزة وسهلة الفهم.
  • المرونة: يمكنك بسهولة توسيع هذا المنطق للفرز حسب الحقول الأخرى أو تضمين شروط أكثر تعقيدًا.

خاتمة

تعد معالجة الفرز باستخدام قيم فارغة أو فارغة في Laravel مهمة شائعة عند التعامل مع البيانات التي قد لا تكون كاملة دائمًا. باستخدام طريقة orderByRaw() مع تعبير SQL مثل Attend_at IS NULL، Attend_at DESC، يمكنك بسهولة التأكد من ظهور الصفوف ذات القيم NULL في الأسفل مع الاستمرار في فرز بقية البيانات بطريقة ذات معنى.

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

تعليمات سعيدة!

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/nasrulhazim/sorting-rews-with-pty-values-at-the-bottom-and-non-n-non-des-vised-in-order- in-laravel-2ao9؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] إلى الحذف.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3