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 bariswhere(),whereIn(),whereBetween()untuk filter data- Mendukung insert, update, delete, dan operasi increment/decrement
Tutorial berikutnya membahas Eloquent ORM dasar di Laravel.
.jpg)
