Query Builder vs Eloquent — Kapan Pakai yang Mana?
Halo bos! Selamat datang di Artikel 8 Belajar Laravel 13.
Di Artikel 7 kita sudah mengenal Eloquent lewat Model Post dan Category. Sekarang kita akan membahas satu hal penting yang sering bikin bingung pemula:
Laravel punya dua cara untuk query database. Kapan pakai yang mana?
Dua cara itu adalah:
- Query Builder → DB::table('posts')
- Eloquent → Post::query() atau Post::where(...)
Keduanya sangat berguna, tapi punya tujuan yang berbeda.
1. Apa Itu Query Builder?
Query Builder adalah cara yang lebih rendah level. Dia bekerja langsung ke nama tabel, dan hasilnya berupa object biasa (stdClass), bukan Model.
Contoh:
Hasilnya adalah kumpulan object biasa. Tidak ada method relasi, tidak ada $fillable, tidak ada event model.
2. Apa Itu Eloquent?
Eloquent bekerja melalui Model. Hasilnya adalah instance dari class Post atau Category.
Contoh:
Karena hasilnya adalah Model, kita bisa langsung mengakses relasi:
3. Perbandingan Langsung
Mari kita buat dua route demo supaya perbedaannya kelihatan jelas.
Buka routes/web.php dan tambahkan:
Sekarang buka kedua URL ini di browser:
- http://blog-sederhana.test/demo/query-builder
- http://blog-sederhana.test/demo/eloquent
Yang terlihat:
- Isi datanya sama
- Tapi struktur object-nya berbeda
Query Builder mengembalikan object generik, sedangkan Eloquent mengembalikan instance Model Post lengkap.
4. Tabel Perbandingan
5. Contoh Konkret Perbedaannya
Kebutuhan: Ambil judul post beserta nama kategorinya.
Pakai Query Builder (harus JOIN manual):
Pakai Eloquent (jauh lebih bersih):
Eloquent yang mengurus relasinya. Kita tidak perlu menulis JOIN sendiri.
6. Kapan Pakai yang Mana? (Aturan Praktis)
Pakai Eloquent untuk hampir semua kasus sehari-hari:
- Menampilkan daftar post
- Form create / edit
- Detail post
- Segala sesuatu yang melibatkan relasi
Pakai Query Builder ketika:
- Query sangat kompleks (laporan besar, banyak JOIN, subquery berat)
- Kamu butuh performa maksimal dan tidak memerlukan fitur Model
- Sedang mengolah data di dalam Migration (lebih aman pakai DB::table)
Fakta penting:
Eloquent sendiri dibangun di atas Query Builder. Jadi keduanya bukan sistem terpisah, melainkan dua lapisan abstraksi.
Kalau kamu tulis:
Di balik layar Laravel tetap menggunakan Query Builder, lalu mengubah hasilnya menjadi object Model.
7. Tips Tambahan
- Untuk query dinamis yang panjang, lebih baik mulai dengan Model::query() supaya kode lebih rapi:
- Kalau kamu ingin hasilnya tetap berupa data biasa (bukan Model) tapi tetap menghormati global scope, bisa pakai:
Ringkasan
- Query Builder → lebih rendah level, lebih ringan, cocok untuk query kompleks dan laporan.
- Eloquent → lebih ekspresif, mendukung relasi, mass assignment, event. Cocok untuk hampir semua kebutuhan aplikasi biasa.
- Untuk project blog kita, ke depan kita akan lebih sering memakai Eloquent.
Tutorial terkait
Model & Eloquent ORM Dasar di Laravel 13
Tabel sudah ada di database, tapi kalau mau query data, kita butuh cara yang lebih ekspresif daripada SQL mentah. Di sinilah Eloquent, ORM (Object-Relational Mapping) bawaan Laravel, berperan
Migration Dasar — Membuat Tabel Posts dan Categories
Sampai episode ini kita belum punya tabel posts atau categories sama sekali — controller kita masih mengembalikan teks placeholder. Saatnya bikin struktur database sungguhan lewat migration
Blade Templating Dasar — Layout, Include, dan Component
Sampai sekarang, setiap kali kita return teks dari Controller, hasilnya hanya teks polos. Tentu saja website sungguhan butuh HTML yang rapi: header, navbar, footer, dan konten yang berbeda di setiap halaman