← Kembali ke tutorial
Laravel Pemula

Query Builder vs Eloquent — Kapan Pakai yang Mana?

01 November 2026 2 kali dibaca

Bagikan: Link disalin!
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:

  1. Query Builder → DB::table('posts')
  2. 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:

use Illuminate\Support\Facades\DB;

$posts = DB::table('posts')
->orderBy('created_at', 'desc')
->get();

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:

use App\Models\Post;

$posts = Post::orderBy('created_at', 'desc')->get();

Karena hasilnya adalah Model, kita bisa langsung mengakses relasi:

$posts = Post::with('category')->get();

foreach ($posts as $post) {
echo $post->title . ' - ' . $post->category->name;
}

3. Perbandingan Langsung

Mari kita buat dua route demo supaya perbedaannya kelihatan jelas.

Buka routes/web.php dan tambahkan:

use App\Models\Post;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;

// Query Builder
Route::get('/demo/query-builder', function () {
return DB::table('posts')
->orderBy('created_at', 'desc')
->get();
});

// Eloquent
Route::get('/demo/eloquent', function () {
return Post::orderBy('created_at', 'desc')->get();
});

Sekarang buka kedua URL ini di browser:

  1. http://blog-sederhana.test/demo/query-builder
  2. http://blog-sederhana.test/demo/eloquent

Yang terlihat:

  1. Isi datanya sama
  2. 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):

$posts = DB::table('posts')
->join('categories', 'posts.category_id', '=', 'categories.id')
->select('posts.title', 'categories.name as category_name')
->get();

Pakai Eloquent (jauh lebih bersih):

$posts = Post::with('category')->get();

foreach ($posts as $post) {
echo $post->title . ' - ' . $post->category->name;
}

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:

  1. Menampilkan daftar post
  2. Form create / edit
  3. Detail post
  4. Segala sesuatu yang melibatkan relasi

Pakai Query Builder ketika:

  1. Query sangat kompleks (laporan besar, banyak JOIN, subquery berat)
  2. Kamu butuh performa maksimal dan tidak memerlukan fitur Model
  3. 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:

Post::where('status', 'published')->get();

Di balik layar Laravel tetap menggunakan Query Builder, lalu mengubah hasilnya menjadi object Model.

7. Tips Tambahan

  1. Untuk query dinamis yang panjang, lebih baik mulai dengan Model::query() supaya kode lebih rapi:
$query = Post::query();

if (request('category')) {
$query->where('category_id', request('category'));
}

$posts = $query->latest()->paginate(10);
  1. Kalau kamu ingin hasilnya tetap berupa data biasa (bukan Model) tapi tetap menghormati global scope, bisa pakai:
Post::query()->toBase()->get();

Ringkasan

  1. Query Builder → lebih rendah level, lebih ringan, cocok untuk query kompleks dan laporan.
  2. Eloquent → lebih ekspresif, mendukung relasi, mass assignment, event. Cocok untuk hampir semua kebutuhan aplikasi biasa.
  3. Untuk project blog kita, ke depan kita akan lebih sering memakai Eloquent.

Tutorial terkait