12 Desember, 2019

Menampilkan query dari Eloquent pada Laravel 6 / 5.1+

Terkadang mood lagi di atas angin lalu semangat untuk melanjutkan pengembangan aplikasi melambung tinggi. Alur aplikasi, logika pemrosesan data, imajinasi tampilan antar muka yang indah sudah lengkap hingga akhirnya kamu tiba pada fase mengetes kode sederhana untuk fungsi dasar. Belum sampai potongan kode dengan algoritma dan logika yang begitu rumit, hanya beberapa baris pengambilan data dari database.

public function showChatList($phone_number) {
    $people = DB::connection('active_messaging')->table('chat_list')
        ->where('phone_number', $phone_number)
        ->get();

    return response()->json(['people' => $people]);
}

Namun hasil dari API tool atau browser hanyalah sebuah array kosong atau objek null. Ada apa ini?! Padahal saya sudah yakin data pada tabel ada, nama koneksi, nama tabel, nama kolom, dan request parameternya sudah benar. Sesaat kemudian, setelah mengutak atik kode dengan sintaks alternatif, mengecek kembali penulisan variabel, dan semua berakhir sama, belum berhasil. Akhirnya kamu pun kesal dan ingin melihat sintaks query yang dijalankan oleh baris kode tersebut.

Jika pada laravel versi 5.0 dan 4.2 kamu bisa menggunakan fitur query logger dari class DB, dengan cara DB::getQueryLog(), maka mulai dari versi 5.1 ke atas sudah tidak lagi menggunakan cara tersebut. Bagi kamu yang tidak ingin terlalu banyak menggunakan library eksternal, maka cara yang ada pada postingan kali ini sangat cocok buatmu.

Listening Query Events #

Dengan fitur ini kamu bisa melihat sintaks query, , dan juga waktu eksekusi pada setiap query yang dijalankan. Untuk menggunakannya cukup dengan metode listen dari kelas DB dan diletakkan pada Service Provider.

public function boot()
{
    DB::listen(function ($query)) {
        Log::info($query->sql);
        Log::info($query->bindings);
        Log::info($query->time);
    }
}

Khusus untuk Laravel 5.1, sintaksnya agak berbeda dimana objek setiap fungsi tidak berasal dari variabel $query melainkan menggunakan variabel masing – masing

DB::listen(function ($sql, $bindings, $time)) {
    // Log::info($sql)
    ...
} 

Lalu dimanakah hasilnya berada? Silahkan buka file – filenya disini ./storage/logs/laravel-{tanggal_hari_ini}.log.

Sekian trik singkat kali ini untuk Laravel. Sampai jumpa di postingan tips dan trik unik dalam dunia web development berikutnya.