Laravel Collection

administrator

Administrator
Nhân viên
9 Tháng tám 2021
87
0
6
Định nghĩa
Collection trong Laravel là một class được tích hợp sẵn các phương thức thường xuyên được sử dụng để xử lý dữ liệu nhàm giảm thiểu tối đa thời gian cho các lập trình viên. Đặc biệt là khi làm việc với API kết nối với database vì dữ liệu từ database trả về sẵn kiểu là Collection.

Khai báo và cách sử dụng

Mã:
use Illuminate\Support\Collection;
Một số hàm hay dùng

1. Listing


  • all(): Lấy ra tất cả giá trị có trong collection và trả về dưới dạng mảng.
Mã:
collect([1, 2, 3])->all();
// Output: [1, 2, 3]


  • avg(): Trả về giá trị trung bình của tất cả các giá trị có trong collection.

Mã:
collect([1, 2, 3, 4, 5])->avg();
// Output: 3


Nếu collection là một mảng lồng nhau hoặc là một object, Bạn cần phải truyền vào giá trị của key để xác định giá trị dùng để tính trung bình


Mã:
$collection = collect([
['name' => 'JavaScript: The Good Parts', 'pages' => 176],
['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
]);

$collection->avg('pages');
// Output: 636


  • chunk(): Hàm này chia collection ra thành các collection nhỏ hơn.
Mã:
$collection = collect([1, 2, 3, 4, 5, 6, 7]);

$chunks = $collection->chunk(4);

$chunks->toArray();
// Output: [[1, 2, 3, 4], [5, 6, 7]]


Hàm này vô cùng hữu dụng trong views khi bạn làm việc với 'grid system'. Tưởng tượng bạn đang có một collection của Eloquent. Bạn cần hiển thị nó với grid layout:

Mã:
@foreach ($products->chunk(3) as $chunk)
<div class="row">
@foreach ($chunk as $product)
<div class="col-xs-4">{{ $product->name }}</div>
@endforeach
</div>
@endforeach

@foreach ($chunk as $product)  {{ $product->name }}
@endforeach
   @endforeach " delay="2000" title="Sao chép" style="box-sizing: border-box; border-radius: 5px; margin: 0px; font-family: inherit; font-size: inherit; line-height: inherit; overflow: visible; text-transform: none; appearance: button; position: absolute; display: flex; align-items: center; justify-content: center; top: 7.5px; right: 6px; cursor: pointer; outline: none; border: none; background: rgb(101, 84, 84); height: 25px; opacity: 0.5;">
  • collapse(): Biến 1 collection của nhiều mảng thành collection của một mảng.
Mã:
$collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);

$collapsed = $collection->collapse();

$collapsed->all();

// Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • contains(): Phương pháp xác định collection có chứa 1 item nhất định hay không?
Mã:
$collection = collect(['name' => 'Desk', 'price' => 100]);

$collection->contains('Desk');

// true

$collection->contains('New York');

// false


  • count(): Trả về tổng số item có trong collection.
Mã:
$collection = collect([1, 2, 3, 4]);

$collection->count();
// Output: 4


  • diff(): So sánh 2 collection với nhau hoặc collection với một mảng trong array.
Mã:
$collection = collect([1, 2, 3, 4, 5]);

$diff = $collection->diff([2, 4, 6, 8]);

$diff->all();

// Output: [1, 3, 5]


  • filter(): Hàm này sẽ duyệt từ đầu tới cuối của collection. Nó chỉ giữ lại giá trị nào thỏa mãn điều kiện lọc. giá trị k thoả mãn sẽ bị loại bỏ.
Mã:
$collection = collect([1, 2, 3, 4]);

$filtered = $collection->filter(function ($value, $key) {
return $value > 2;
});

$filtered->all();

// [3, 4]


  • first(): Trả về giá trị đầu tiên của collection.
Mã:
collect([1, 2, 3, 4])->first();

// Output: 1


Tương tự như hàm filter(). Bạn cũng có thể truyền điều kiện vào hàm first() như sau.

Mã:
collect([1, 2, 3, 4])->first(function ($key, $value) {
return $value > 2;
});

// 3


  • groupBy(): Gộp các item của collection theo 1 key nhất định
Mã:
$collection = collect([
['account_id' => 'account-x10', 'product' => 'Chair'],
['account_id' => 'account-x10', 'product' => 'Bookcase'],
['account_id' => 'account-x11', 'product' => 'Desk'],
]);

$grouped = $collection->groupBy('account_id');

$grouped->toArray();

/*
[
'account-x10' => [
['account_id' => 'account-x10', 'product' => 'Chair'],
['account_id' => 'account-x10', 'product' => 'Bookcase'],
],
'account-x11' => [
['account_id' => 'account-x11', 'product' => 'Desk'],
],
]
*/



  • has(): Cho phép kiểm tra một item có tồn tịa trong collection hay không?
Mã:
$collection = collect(['account_id' => 1, 'product' => 'Desk']);

$collection->has('email');

// false


  • implode(): Kết hợp item trong 1 collection.
Mã:
$collection = collect([
['account_id' => 1, 'product' => 'Desk'],
['account_id' => 2, 'product' => 'Chair'],
]);

$collection->implode('product', ', ');

// Desk, Chair


  • isEmpty(): Trả về true nếu collection rỗng. Trả về false nếu collection khác rỗng.
Mã:
collect([])->isEmpty();

// true
Trên đây là một số hàm thường được dùng. Tất cả các hàm của collection có tại đây: Collection Method