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.
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:
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.
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();
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.
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!