; Query Builder dengan where(), groupBy(), dan having() - Blog Rudi Kurniawan

Blog Laravel Indonesia

Belajar Laravel dengan Mudah dan Menyenangkan

Query Builder dengan where(), groupBy(), dan having()
12-07-2025 | Admin User Programming 31 x dilihat

Query Builder dengan where(), groupBy(), dan having()

Apa Itu where(), groupBy(), dan having()?

Query Builder di Laravel memungkinkan pengambilan data dari database dengan sintaks PHP sederhana.

  • where(): Memfilter data berdasarkan kondisi tertentu (misalnya, postingan dengan judul tertentu).
  • groupBy(): Mengelompokkan data berdasarkan kolom (misalnya, mengelompokkan berdasarkan user_id).
  • having(): Memfilter hasil pengelompokan berdasarkan kondisi agregat (misalnya, kelompok dengan jumlah postingan tertentu).

Hubungan dengan Database

Metode ini digunakan untuk mempersempit hasil query:

  • where(): Memfilter baris individual.
  • groupBy(): Mengelompokkan baris dengan nilai kolom yang sama.
  • having(): Memfilter kelompok berdasarkan fungsi agregat seperti COUNT, SUM, dll.

Tutorial Menggunakan where(), groupBy(), dan having()

Berikut langkah-langkah menggunakan metode ini untuk tabel posts (kolom: id, user_id, title, content, created_at).

Persiapan

Pastikan kamu sudah:

  • Menginstal Laravel dan mengatur koneksi database di file .env.
  • Membuat tabel posts dengan migration dan mengisi data (misalnya, via seeder).
  • Menjalankan php artisan migrate untuk membuat tabel.

Langkah-Langkah

  1. Menggunakan where()
    Tambahkan rute di routes/web.php untuk memfilter postingan berdasarkan kata kunci di title:

    use Illuminate\Support\Facades\DB;
    
    Route::get('/posts/search', function () {
        $posts = DB::table('posts')
            ->where('title', 'like', '%Laravel%')
            ->get();
        return $posts;
    });
    

    Penjelasan:

    • where('title', 'like', '%Laravel%'): Memfilter postingan dengan "Laravel" di judul.
    • get(): Mengembalikan semua baris yang cocok.
  2. Menggunakan groupBy()
    Tambahkan rute untuk mengelompokkan postingan berdasarkan user_id dan menghitung jumlahnya:

    Route::get('/posts/by-user', function () {
        $posts = DB::table('posts')
            ->select('user_id', DB::raw('COUNT(*) as total_posts'))
            ->groupBy('user_id')
            ->get();
        return $posts;
    });
    

    Penjelasan:

    • groupBy('user_id'): Mengelompokkan data berdasarkan user_id.
    • DB::raw('COUNT(*) as total_posts'): Menghitung jumlah postingan per pengguna.
  3. Menggunakan having()
    Tambahkan rute untuk memfilter kelompok pengguna dengan lebih dari 2 postingan:

    Route::get('/posts/active-users', function () {
        $posts = DB::table('posts')
            ->select('user_id', DB::raw('COUNT(*) as total_posts'))
            ->groupBy('user_id')
            ->having('total_posts', '>', 2)
            ->get();
        return $posts;
    });
    

    Penjelasan:

    • having('total_posts', '>', 2): Memfilter kelompok dengan jumlah postingan lebih dari 2.
    • Digabungkan dengan groupBy() untuk hasil yang relevan.
  4. Jalankan Server
    Jalankan server Laravel dengan:

    php artisan serve
    

    Uji rute:

    • http://localhost:8000/posts/search: Menampilkan postingan dengan "Laravel" di judul.
    • http://localhost:8000/posts/by-user: Menampilkan jumlah postingan per pengguna.
    • http://localhost:8000/posts/active-users: Menampilkan pengguna dengan lebih dari 2 postingan.

Mengapa Metode Ini Penting?

  • where(): Memungkinkan filtering data yang tepat.
  • groupBy(): Mengelompokkan data untuk analisis ringkas.
  • having(): Memfilter hasil agregat untuk hasil yang lebih spesifik.

Contoh Hasil

Jika tabel posts berisi:

[
    {"id": 1, "user_id": 1, "title": "Belajar Laravel", "content": "..."},
    {"id": 2, "user_id": 1, "title": "Laravel Query", "content": "..."},
    {"id": 3, "user_id": 2, "title": "PHP Framework", "content": "..."},
    {"id": 4, "user_id": 1, "title": "Laravel Lagi", "content": "..."}
]
  • /posts/search: Mengembalikan postingan dengan "Laravel" di judul (ID 1, 2, 4).
  • /posts/by-user: Mengembalikan:
    [
        {"user_id": 1, "total_posts": 3},
        {"user_id": 2, "total_posts": 1}
    ]
    
  • /posts/active-users: Mengembalikan hanya user_id: 1 dengan total_posts: 3.

Langkah Selanjutnya

  • Kombinasikan dengan join() untuk menggabungkan tabel lain (misalnya, users).
  • Gunakan Query Builder dengan Blade untuk menampilkan data di tampilan.
  • Baca dokumentasi Query Builder untuk fitur seperti pagination atau subqueries.

Selamat! Kamu sudah menguasai Query Builder dengan where(), groupBy(), dan having() di Laravel!

Share this

Facebook Whatsapp