Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Isih Baris dengan Nilai Kosong di Bahagian Bawah dan Nilai Bukan Kosong dalam Susunan Menurun dalam Laravel

Isih Baris dengan Nilai Kosong di Bahagian Bawah dan Nilai Bukan Kosong dalam Susunan Menurun dalam Laravel

WBOY
WBOYasal
2024-09-07 08:31:02996semak imbas

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

Apabila bekerja dengan pangkalan data, adalah perkara biasa untuk menghadapi situasi di mana sesetengah medan mungkin kosong atau NULL. Satu cabaran yang sering timbul ialah cara mengisih rekod supaya baris dengan medan kosong muncul di bahagian bawah set hasil, manakala yang mempunyai nilai tidak kosong disusun dengan cara yang bermakna (cth., tertib menurun). Dalam siaran ini, saya akan menunjukkan kepada anda cara untuk mencapai ini dalam Laravel menggunakan contoh praktikal.

Senario

Katakanlah anda mempunyai jadual peserta untuk sesuatu aktiviti, dan setiap peserta mungkin mempunyai cap waktu_pada masa yang dihadiri atau tidak, yang merekodkan apabila peserta menghadiri aktiviti tersebut. Anda ingin menyenaraikan semua peserta, mengisih mereka dengan cara yang:

  • Peserta yang telah menghadiri (iaitu, menghadiri_di tidak kosong) muncul dahulu, diisih mengikut kehadiran terkini.
  • Peserta yang belum hadir (iaitu, menghadiri_di adalah kosong atau NULL) muncul terakhir.

Masalahnya

Secara lalai, kaedah terbaru() Laravel mengisih rekod mengikut lajur yang diberikan dalam tertib menurun. Walau bagaimanapun, ia tidak mengendalikan kes di mana sesetengah rekod mempunyai nilai NULL atau kosong. Jika anda hanya menggunakan:

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

Ia akan memesan peserta dengan cap masa, tetapi ia tidak akan mengalihkan nilai NULL ke bawah.

Penyelesaian: Menggunakan orderByRaw

Kita boleh mencapai pengisihan yang diingini menggunakan kaedah orderByRaw(). Ini membolehkan kami menulis logik pengisihan tersuai menggunakan ungkapan SQL mentah. Dalam kes ini, kami akan membuat pesanan mengikut sama ada attended_at ialah NULL, dan kemudian memesan dengan attended_at dalam tertib menurun untuk nilai bukan NULL.

Begini cara anda boleh menulis pertanyaan ini dalam 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();

Memecahkan Pertanyaan

  • orderByRaw('attended_at IS NULL, attended_at DESC'):
    • attended_at IS NULL: Ini akan mengembalikan true (atau 1) untuk baris yang attended_at adalah NULL dan false (atau 0) sebaliknya. Ini secara berkesan meletakkan nilai NULL di bahagian bawah.
    • attended_at DESC: Selepas mengendalikan nilai NULL, ini mengisih baris yang tinggal dengan nilai attended_at yang tidak kosong dalam tertib menurun, bermakna kehadiran paling terkini akan ditunjukkan dahulu.

Output Akhir

Fungsi map() kemudiannya digunakan untuk memformat output dalam struktur yang diingini, termasuk medan seperti student_id, nama dan status, dan menukar cap waktu attended_at kepada format yang boleh dibaca manusia atau '-' jika ia kosong.

Faedah Pendekatan Ini

  • Prestasi: Pendekatan ini memanfaatkan keupayaan pengisihan SQL, menjadikannya cekap untuk set data yang besar.
  • Kebolehbacaan: Menggunakan orderByRaw() dengan ungkapan SQL mentah memastikan kod itu ringkas dan mudah difahami.
  • Fleksibiliti: Anda boleh melanjutkan logik ini dengan mudah untuk mengisih mengikut medan lain atau memasukkan keadaan yang lebih kompleks.

Kesimpulan

Mengendalikan pengisihan dengan nilai NULL atau kosong dalam Laravel ialah tugas biasa apabila bekerja dengan data yang mungkin tidak selalu lengkap. Dengan menggunakan kaedah orderByRaw() dengan ungkapan SQL seperti attended_at IS NULL, attended_at DESC, anda boleh dengan mudah memastikan baris dengan nilai NULL muncul di bahagian bawah sambil masih mengisih data yang lain dengan cara yang bermakna.

Kaedah ini amat berguna dalam senario di mana anda berurusan dengan kehadiran, seperti yang ditunjukkan dalam contoh ini, tetapi ia boleh digunakan pada banyak situasi lain di mana beberapa medan data mungkin tiada. Dengan pendekatan ini, anda boleh memberikan pengguna anda paparan rekod yang lebih jelas dan intuitif dalam aplikasi anda.

Selamat pengekodan!

Atas ialah kandungan terperinci Isih Baris dengan Nilai Kosong di Bahagian Bawah dan Nilai Bukan Kosong dalam Susunan Menurun dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn