Cara Menggunakan Laravel Collection Secara Efektif

Laravel Collection adalah salah satu fitur paling powerful yang sering diremehkan oleh developer pemula. Collection adalah pembungkus (wrapper) yang elegan untuk bekerja dengan arr...

Cara Menggunakan Laravel Collection Secara Efektif

Laravel Collection adalah salah satu fitur paling powerful yang sering diremehkan oleh developer pemula. Collection adalah pembungkus (wrapper) yang elegan untuk bekerja dengan array data, menyediakan puluhan method bawaan yang memudahkan manipulasi data tanpa perlu menulis loop manual. Setelah membaca artikel ini, kamu akan menggunakan Collection secara lebih cerdas dan efisien.

Apa itu Laravel Collection?

Collection adalah instance dari kelas Illuminate\Support\Collection. Setiap query Eloquent yang mengembalikan banyak baris akan otomatis menjadi Collection. Kamu juga bisa membuat Collection secara manual:

<?php

use Illuminate\Support\Collection;

// Dari array biasa
$collection = collect([1, 2, 3, 4, 5]);

// Dari array asosiatif
$users = collect([
    ['name' => 'Budi', 'age' => 25, 'city' => 'Jakarta'],
    ['name' => 'Ani',  'age' => 30, 'city' => 'Bandung'],
    ['name' => 'Caca', 'age' => 22, 'city' => 'Jakarta'],
    ['name' => 'Dodi', 'age' => 28, 'city' => 'Surabaya'],
]);

Method map() โ€” Transformasi Data

map() mengiterasi setiap item dan mengembalikan Collection baru hasil transformasi:

// Mengubah semua nama menjadi huruf besar
$upperNames = $users->map(function ($user) {
    return strtoupper($user['name']);
});
// Result: ['BUDI', 'ANI', 'CACA', 'DODI']

// Dengan arrow function (PHP 7.4+)
$prices = collect([10000, 25000, 15000]);
$discounted = $prices->map(fn($price) => $price * 0.9);
// Result: [9000, 22500, 13500]

Method filter() โ€” Menyaring Data

filter() mengembalikan Collection yang hanya berisi item yang lulus kondisi:

// Filter user dari Jakarta
$jakartaUsers = $users->filter(fn($user) => $user['city'] === 'Jakarta');
// Result: Budi dan Caca

// Filter tanpa callback: hapus nilai falsy (null, false, 0, '')
$clean = collect([1, null, 2, false, 3, 0])->filter();
// Result: [1, 2, 3]

// Re-index setelah filter
$reindexed = $jakartaUsers->values();

Method groupBy() โ€” Mengelompokkan Data

groupBy() sangat berguna untuk mengelompokkan data berdasarkan key tertentu:

$byCity = $users->groupBy('city');

/*
Result:
[
  'Jakarta'  => [Budi, Caca],
  'Bandung'  => [Ani],
  'Surabaya' => [Dodi],
]
*/

// Akses tiap group
$jakartaGroup = $byCity->get('Jakarta');
$jakartaGroup->count(); // 2

Method pluck() โ€” Mengambil Nilai Satu Kolom

// Ambil semua nama
$names = $users->pluck('name');
// Result: ['Budi', 'Ani', 'Caca', 'Dodi']

// Buat key-value pair
$nameById = User::all()->pluck('name', 'id');
// Result: [1 => 'Budi', 2 => 'Ani', ...]

// Berguna untuk dropdown select
<select name="user_id">
    @foreach($nameById as $id => $name)
        <option value="{{ $id }}">{{ $name }}</option>
    @endforeach
</select>

Method reduce() โ€” Akumulasi Nilai

// Hitung total harga
$items = collect([
    ['name' => 'Buku', 'price' => 50000, 'qty' => 2],
    ['name' => 'Pensil', 'price' => 5000, 'qty' => 5],
    ['name' => 'Tas', 'price' => 200000, 'qty' => 1],
]);

$total = $items->reduce(function ($carry, $item) {
    return $carry + ($item['price'] * $item['qty']);
}, 0);
// Result: 325000

Chaining Method โ€” Kekuatan Sebenarnya Collection

Keunggulan terbesar Collection adalah kemampuan method chaining yang membuat kode lebih ekspresif:

// Ambil nama user dari Jakarta, usia di atas 23, diurutkan abjad
$result = $users
    ->filter(fn($u) => $u['city'] === 'Jakarta')
    ->filter(fn($u) => $u['age'] > 23)
    ->sortBy('name')
    ->pluck('name')
    ->values();
// Result: ['Budi']

Method Berguna Lainnya

  • sum('price') โ€” menjumlahkan nilai dari key tertentu.
  • avg('age') โ€” rata-rata nilai.
  • max('age') / min('age') โ€” nilai maksimum/minimum.
  • sortBy('name') / sortByDesc('age') โ€” mengurutkan data.
  • unique('city') โ€” menghapus duplikat.
  • chunk(3) โ€” memecah Collection menjadi potongan-potongan kecil.
  • contains('name', 'Budi') โ€” cek apakah ada item yang cocok.
  • first() / last() โ€” mengambil elemen pertama/terakhir.
  • toArray() โ€” mengubah kembali menjadi array PHP biasa.
  • toJson() โ€” mengubah menjadi string JSON.

Lazy Collection untuk Data Besar

Jika kamu perlu memproses data yang sangat besar (ratusan ribu baris), gunakan LazyCollection agar memori tetap efisien:

use Illuminate\Support\LazyCollection;

// Proses file besar baris per baris
LazyCollection::make(function () {
    $handle = fopen('data.csv', 'r');
    while (($line = fgets($handle)) !== false) {
        yield $line;
    }
})->chunk(1000)->each(function ($chunk) {
    // Proses per 1000 baris
});

Kesimpulan

Laravel Collection mengubah cara kamu berpikir tentang manipulasi data. Daripada menulis loop foreach bertumpuk, gunakan method Collection yang ekspresif dan bisa di-chain. Mulai dari map(), filter(), groupBy(), hingga reduce() โ€” semua tersedia siap pakai. Semakin kamu familiar dengan Collection, semakin bersih dan mudah dibaca kode Laravel-mu.

laravel collection collection laravel method collection laravel map filter laravel laravel eloquent collection manipulasi data 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 โ†’