Tutorial Laravel #12: Query Builder Dasar

1. Apa itu Query Builder?

Query Builder adalah cara Laravel untuk membuat query database menggunakan method PHP yang berantai (method chaining) - tanpa perlu nulis SQL mentah. Query Builder secara otomatis melindungi dari SQL Injection dan kompatibel dengan berbagai database (MySQL, PostgreSQL, SQLite).

2. Select - Mengambil Data

use IlluminateSupportFacadesDB;

// Ambil semua baris
$users = DB::table('users')->get();

// Ambil satu baris
$user = DB::table('users')->where('id', 1)->first();

// Ambil nilai satu kolom saja
$email = DB::table('users')->where('id', 1)->value('email');

// Ambil satu kolom sebagai array
$emails = DB::table('users')->pluck('email');

// Ambil kolom tertentu saja
$users = DB::table('users')->select('id', 'nama', 'email')->get();

// Hitung jumlah baris
$total = DB::table('users')->count();
$maxUmur = DB::table('users')->max('umur');
$rata = DB::table('users')->avg('nilai');

3. Where - Filter Data

// Where dasar
$aktif = DB::table('users')->where('status', 'aktif')->get();
$dewasa = DB::table('users')->where('umur', '>=', 17)->get();

// Multiple where (AND)
$hasil = DB::table('users')
    ->where('status', 'aktif')
    ->where('umur', '>=', 17)
    ->get();

// OR where
$hasil = DB::table('users')
    ->where('role', 'admin')
    ->orWhere('role', 'editor')
    ->get();

// Where In
$hasil = DB::table('users')
    ->whereIn('role', ['admin', 'editor', 'author'])
    ->get();

// Where Between
$hasil = DB::table('produk')
    ->whereBetween('harga', [100000, 500000])
    ->get();

// Where Null
$unverified = DB::table('users')->whereNull('email_verified_at')->get();

// Where Like
$cari = DB::table('artikels')
    ->where('judul', 'like', '%laravel%')
    ->get();

4. Order, Limit, dan Offset

// Order
$terbaru = DB::table('artikels')
    ->orderBy('created_at', 'desc')
    ->get();

// Latest dan Oldest shorthand
$terbaru = DB::table('artikels')->latest()->get();
$terlama = DB::table('artikels')->oldest()->get();

// Limit dan Offset (manual pagination)
$halaman2 = DB::table('artikels')
    ->orderBy('id')
    ->limit(10)
    ->offset(10)   // skip 10 baris pertama
    ->get();

5. Insert, Update, Delete

// Insert satu baris
DB::table('artikels')->insert([
    'judul'    => 'Judul Artikel',
    'konten'   => 'Isi konten...',
    'user_id'  => 1,
    'created_at' => now(),
    'updated_at' => now(),
]);

// Insert dan dapatkan ID
$id = DB::table('artikels')->insertGetId(['judul' => 'Test']);

// Update
DB::table('artikels')
    ->where('id', 5)
    ->update(['status' => 'published', 'updated_at' => now()]);

// Increment / Decrement
DB::table('artikels')->where('id', 5)->increment('views');
DB::table('artikels')->where('id', 5)->increment('views', 5);

// Delete
DB::table('artikels')->where('id', 5)->delete();
DB::table('artikels')->where('status', 'draft')->delete();

6. Join

$artikels = DB::table('artikels')
    ->join('users', 'artikels.user_id', '=', 'users.id')
    ->join('kategoris', 'artikels.kategori_id', '=', 'kategoris.id')
    ->select('artikels.*', 'users.name as penulis', 'kategoris.nama as kategori')
    ->where('artikels.status', 'published')
    ->orderBy('artikels.created_at', 'desc')
    ->get();

7. Raw Query (Jika Perlu)

// Raw select
$users = DB::select('SELECT * FROM users WHERE aktif = ?', [1]);

// Raw dalam query builder
$users = DB::table('users')
    ->selectRaw('COUNT(*) as total, role')
    ->groupBy('role')
    ->get();

8. Ringkasan

  • Query Builder pakai method chaining - mudah dibaca dan aman dari SQL Injection
  • get() untuk banyak baris, first() untuk satu baris
  • where(), whereIn(), whereBetween() untuk filter data
  • Mendukung insert, update, delete, dan operasi increment/decrement

Tutorial berikutnya membahas Eloquent ORM dasar di Laravel.


ariq fadhil

Im Ariq Tech, a Top Rated Fullstack Developer with 5+ years of experience, delivering high-quality solutions across 50+ projects.