;
Belajar Laravel dengan Mudah dan Menyenangkan
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).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.Berikut langkah-langkah menggunakan metode ini untuk tabel posts (kolom: id, user_id, title, content, created_at).
Pastikan kamu sudah:
.env.posts dengan migration dan mengisi data (misalnya, via seeder).php artisan migrate untuk membuat tabel.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.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.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.groupBy() untuk hasil yang relevan.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.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.join() untuk menggabungkan tabel lain (misalnya, users).Selamat! Kamu sudah menguasai Query Builder dengan where(), groupBy(), dan having() di Laravel!