Cara Menggunakan Query Builder di Laravel

Saat membangun aplikasi dengan Laravel, kamu tidak selalu harus menggunakan Eloquent ORM. Untuk query yang lebih kompleks atau ketika performa menjadi prioritas, Query Builder adal...

Cara Menggunakan Query Builder di Laravel

Saat membangun aplikasi dengan Laravel, kamu tidak selalu harus menggunakan Eloquent ORM. Untuk query yang lebih kompleks atau ketika performa menjadi prioritas, Query Builder adalah pilihan yang tepat. Query Builder menyediakan antarmuka yang nyaman dan aman untuk membangun query SQL tanpa menulis SQL mentah secara langsung.

Apa Itu Query Builder?

Query Builder adalah lapisan abstraksi di atas PDO yang disediakan Laravel melalui facade DB. Dengan Query Builder, kamu bisa membangun query secara berantai (method chaining), dan Laravel akan menangani escaping data secara otomatis sehingga terhindar dari SQL Injection.

Mengambil Data (Select)

Cara paling dasar adalah mengambil seluruh baris dari sebuah tabel:

use Illuminate\Support\Facades\DB;

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

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

// Ambil satu baris pertama
$user = DB::table('users')->where('email', 'john@example.com')->first();

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

Filtering dengan Where

Query Builder menyediakan banyak variasi method where untuk memfilter data:

// Where biasa
$users = DB::table('users')->where('status', 'active')->get();

// Where dengan operator
$users = DB::table('users')->where('age', '>=', 18)->get();

// Multiple where (AND)
$users = DB::table('users')
    ->where('status', 'active')
    ->where('role', 'admin')
    ->get();

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

// Where IN
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();

// Where NULL
$users = DB::table('users')->whereNull('deleted_at')->get();

// Where Between
$orders = DB::table('orders')
    ->whereBetween('created_at', ['2024-01-01', '2024-12-31'])
    ->get();

Insert, Update, dan Delete

Query Builder juga mendukung operasi tulis ke database:

// Insert satu baris
DB::table('products')->insert([
    'name'       => 'Laptop Gaming',
    'price'      => 15000000,
    'created_at' => now(),
    'updated_at' => now(),
]);

// Insert dan ambil ID yang baru dibuat
$id = DB::table('products')->insertGetId([
    'name'  => 'Monitor 4K',
    'price' => 5000000,
]);

// Update data
DB::table('products')
    ->where('id', $id)
    ->update(['price' => 4500000]);

// Increment/Decrement kolom angka
DB::table('products')->where('id', 1)->increment('stock', 10);
DB::table('products')->where('id', 1)->decrement('stock', 2);

// Delete
DB::table('products')->where('id', $id)->delete();

Join Tabel

Query Builder mendukung berbagai jenis JOIN untuk menggabungkan beberapa tabel:

$orders = DB::table('orders')
    ->join('users', 'orders.user_id', '=', 'users.id')
    ->join('products', 'orders.product_id', '=', 'products.id')
    ->select(
        'orders.id',
        'users.name as customer_name',
        'products.name as product_name',
        'orders.total'
    )
    ->where('orders.status', 'completed')
    ->orderBy('orders.created_at', 'desc')
    ->get();

Aggregasi dan Grouping

Untuk kebutuhan pelaporan, Query Builder menyediakan fungsi agregasi:

// Hitung total baris
$count = DB::table('users')->where('status', 'active')->count();

// Jumlah, rata-rata, min, max
$total   = DB::table('orders')->sum('total');
$average = DB::table('orders')->avg('total');
$max     = DB::table('orders')->max('total');

// Group By dengan having
$summary = DB::table('orders')
    ->select('user_id', DB::raw('SUM(total) as total_belanja'))
    ->groupBy('user_id')
    ->having('total_belanja', '>', 500000)
    ->get();

Pagination dan Limit

Membatasi dan mem-paginate hasil query sangat mudah:

// Limit dan offset manual
$users = DB::table('users')->limit(10)->offset(20)->get();

// Pagination otomatis Laravel
$users = DB::table('users')->paginate(15);

// Simple pagination (prev/next saja)
$users = DB::table('users')->simplePaginate(15);

Raw Expression

Ketika kamu membutuhkan ekspresi SQL khusus yang tidak didukung Query Builder secara langsung, gunakan DB::raw():

$users = DB::table('users')
    ->select(DB::raw('COUNT(*) as total, status'))
    ->groupBy('status')
    ->get();

// whereRaw untuk kondisi SQL mentah
$users = DB::table('users')
    ->whereRaw('YEAR(created_at) = ?', [2024])
    ->get();

Kesimpulan

Query Builder Laravel adalah alat yang sangat powerful untuk berinteraksi dengan database secara fleksibel. Dengan method chaining yang intuitif, kamu bisa membangun query kompleks mulai dari select, join, agregasi, hingga insert dan update โ€” semuanya dengan perlindungan dari SQL Injection secara otomatis. Gunakan Query Builder ketika kamu butuh kendali penuh atas query tanpa overhead Eloquent, terutama untuk query pelaporan atau query yang melibatkan banyak tabel.

query builder laravel laravel database query DB facade laravel query builder php laravel select where query database laravel
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’