Collections trong Laravel

Chúng ta đã được học về Relationship trong Laravel(Ràng buộc quan hệ) để có thể xử lý mối quan hệ giữa cá bảng trong database để tiết kiệm thời gian làm việc với database rồi, tuy nhiên liệu có cách nào để lọc, xử lý dữ liệu luôn không? Câu trả lời là có Laraver hỗ trợ người dùng bộ thư viện(Collections). Collections trong Laravel hỗ trợ người dùng lọc,xử lý dữ liệu rất là nhanh chóng và bài viết này sẽ giúp các bạn tìm hiểu về nó. Nào bắt đầu bài học thôi!

1. Collection Trong Laravel là gì?

Collection trong Laravel là một class (lớp) có tích hợp sẵn các phương thức xử lý dữ liệu thường xuyên nhằm làm giảm thiểu tối đa thời gian cho các lập trình viên. Đặc biệt là làm API kết nối tới database vì dữ liệu trả về từ database có sẵn kiểu là Collection.

2. Cách Khai báo, sử dụng Collections.

Để khai báo và sử dụng được Collections chúng ta phải gọi namespace của nó.

use Illuminate\Support\Collection;

Sau khi gọi namespace thành công chúng ta có thể khởi tạo collections bằng 2 cách sau đây:

// cách này dùng helper function nên không cần khai báo namespace
$collection = collect([]);
// hoac
$collection = Collection::make([]);

Trong đó:

  • [] là mảng giá trị các bạn truyền vào.

Lúc này các bạn prinf_r($collection) thì PHP sẽ trả về cho chúng ta một object có chứa giá trị tương ứng với mảng các bạn truyền vào.

3. Các Collection hay dùng.

3.1 all.

Hàm này có tác dụng lấy ra tất cả các giá trị trong collections và trả về dưới dạng mảng.

$data = Collection::make([1, 2, 3, 4, 5, 6])->all();
//output [1,2,3,4,5,6];

3.2 filter.

Hàm này có tác dụng lọc dữ liệu và trả về các dữ liệu đã được lọc.

$collection = collect(['hoc.tv', 'Pham Nhan', 'PHP'])
                ->filter(function ($key, $value) {
                    return $value == 'h';
                });

Output

Array
(
    [0] => hoc.tv
)

3.3 expect.

Hàm này loại bỏ đi các giá trị không cần thiết.

$collection = collect(['product_id' => 1, 'price' => 100, 'discount' => false]);

$filtered = $collection->except(['product_id', 'discount']);
$filtered->all();
// output ['price'=>100]

3.4 Count.

Hàm có tác dụng đếm các phần tử trong collections.

$collection = collect([1, 2, 3, 4]);

$collection->count();

//output 4

3.5 avg.

Hàm tính giá trị trung bình của các phần tử trong mảng.

$data = Collection::make([1, 2, 3, 4, 5, 6])->avg();
//output 3.5

3.6 sum.

-hàm tính tổng giá trị của các phần tử.

$collection = collect([1, 2, 3, 4, 5, 6, 7]);
$chunks = $collection->sum();
//output 28

3.7 chumk.

Hàm các tác dụng tách mảng ra thành các mảng con.

$collection = collect([1, 2, 3, 4, 5, 6, 7]);

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

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

3.8 first.

Hàm có tác dụng trả về giá trị đầu tiên.

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

// 3

3.9 get.

Hàm lấy giá trị của phần tử trong mảng.

$collection = collect(['website' => 'hoc.tv', 'author' => 'Pham Nhan']);

$value = $collection->get('author');

// Pham Nhan

3.10 SortBy.

Hàm sắp xếp lại theo thứ tự tăng dần.

$collection = collect([
    ['name' => 'Desk', 'price' => 200],
    ['name' => 'Chair', 'price' => 100],
    ['name' => 'Bookcase', 'price' => 150],
]);

$sorted = $collection->sortBy('price');

$sorted->values()->all();

/*
    [
        ['name' => 'Chair', 'price' => 100],
        ['name' => 'Bookcase', 'price' => 150],
        ['name' => 'Desk', 'price' => 200],
    ]
*/

3.11 SortByDesc.

Sắp xếp lại giá trị theo thứ tự giảm dần.

$collection = collect([
    ['name' => 'Desk', 'price' => 200],
    ['name' => 'Chair', 'price' => 100],
    ['name' => 'Bookcase', 'price' => 150],
]);

$sorted = $collection->sortByDesc('price');

$sorted->values()->all();

/*
    [
        ['name' => 'Chair', 'price' => 100],
        ['name' => 'Bookcase', 'price' => 150],
        ['name' => 'Desk', 'price' => 200],
    ]
*/

3.12 Take.

Hàm giới hạn số lượng trả về.

$collection = collect([0, 1, 2, 3, 4, 5]);

$chunk = $collection->take(3);

$chunk->all();

//output [0, 1, 2]

-Hoặc lấy từ cuối lên trên.

$collection = collect([0, 1, 2, 3, 4, 5]);

$chunk = $collection->take(-2);

$chunk->all();

//output [4, 5]

3.13 Các hàm khác.

Các hàm ít sử dụng khác các bạn có thể xem thêm tại https://laravel.com/docs/8.x/collections#available-methods.

4. Lời kết.

Collections trong Laravel giúp chúng ta tiết kiệm được rất nhiều thời gian làm việc . Dĩ nhiên không cần thiết phải nhớ tất cả các hàm, bạn có thể bookmark lại để tra cứu khi cần. Chúc các bạn làm chủ được Laravel nhé!

Bình luận