Skip to main content

Laravel Collection

 Đị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

Trước tiên, muốn sử dụng được collection bạn cần khai báo namespace của nó. Hãy thêm dòng này vào đầu file php của bạn.

    use Illuminate\Support\Collection;

Sau đó, bạn có thể tạo collection bằng 1 trong 2 cách sau đây.

//Tạo collection từ mảng
$collection = collect([1, 2, 3]);

$collection = Collection::make([1, 2, 3]);

Lúc này, nếu bạn sử dụng hàm prinf_r($collection) thì PHP sẽ trả về cho chúng ta một object có chứa giá trị tương ứng mà ta đã truyền vào.

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.
    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.
    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

    $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.
    $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:

    @foreach ($products->chunk(3) as $chunk)
        <div class="row">
            @foreach ($chunk as $product)
                <div class="col-xs-4">{{ $product->name }}</div>
            @endforeach
        </div>
    @endforeach
  • collapse(): Biến 1 collection của nhiều mảng thành collection của một mảng.
    $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?
    $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.
    $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.
    $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ỏ.
    $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.
    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.

    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
    $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?
    $collection = collect(['account_id' => 1, 'product' => 'Desk']);

    $collection->has('email');

    // false
  • implode(): Kết hợp item trong 1 collection.
    $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.
    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

Copy from: https://viblo.asia/p/laravel-collection-MVpvKNQwkKd

Comments

Popular posts from this blog

Docker Compose: Node.js Express and MongoDB example

  Docker   provides lightweight containers to run services in isolation from our infrastructure so we can deliver software quickly. In this tutorial, I will show you how to dockerize Nodejs Express and MongoDB example using   Docker Compose .

MUI dialog make sure user can't click on outside when you're opening dialog

< Dialog       open = { open }       onClose = { ( _event , reason ) => {         if ( reason === "backdropClick" || reason === "escapeKeyDown" ) {           return ;         }         onClose ?.();       } }       maxWidth = { maxWidth }       fullWidth       PaperProps = { {         className : "rounded-lg shadow-lg" ,       } }       disableEscapeKeyDown     > { if (reason === "backdropClick" || reason === "escapeKeyDown") { return; } onClose?.(); }} maxWidth={maxWidth} fullWidth PaperProps={{ className: "rounded-lg shadow-lg", }} disableEscapeKeyDown >

HƯỚNG DẪN THIẾT KẾ WEB CHUẨN SEO

  Hướng dẫn thiết kế web chuẩn seo .  Thế nào là thiết kế web chuẩn seo? Tại sao bạn cần phải biết thiết kế web chuẩn seo. Bởi vì, chuẩn seo là một phần rất quan trọng của một trang thiết kế web. Bạn muốn tìm được khách hàng? Muốn từ khóa bạn nhanh lên TOP thì điều đầu tiên bạn cần làm là trang web của bạn được thiết kế chuẩn seo. Không chỉ chuẩn seo về trang web mà bài viết cũng cần được tối ưu hóa cho chuẩn seo. Có bao nhiêu yếu tố để thiết kế được trang web chuẩn seo?