Hàm "tap" trong Laravel Collection

Giới thiệu hàm "tap"

Laravel 5.4.10 giới thiệu một method mới tên tap cho phép ta "khẽ chạm" (tap) vào collection tại một điểm xác định và thao tác với kết quả trả về từ tap mà không ảnh hưởng gì tới collection gốc. Đó là lý do hàm có tên tap - chỉ chạm nhẹ thôi mà không làm gì khác :D.

Tính năng này sẽ được mô tả bằng ví dụ bên dưới giúp bạn hiểu thêm.
 'David Charleston', 'member' => 1, 'active' => 1],
    ['name' => 'Blain Charleston', 'member' => 0, 'active' => 0],
    ['name' => 'Megan Tarash', 'member' => 1, 'active' => 1],
    ['name' => 'Jonathan Phaedrus', 'member' => 1, 'active' => 1],
    ['name' => 'Paul Jackson', 'member' => 0, 'active' => 1]
];
Chúng ta sẽ chuyển đổi mảng trên thành collection rồi lọc mảng có trạng thái active = 1 rồi tap 2 lần.
return collect($items)
    ->where('active', 1)
    ->tap(function($collection){
        return var_dump($collection->pluck('name'));
    })
    ->where('member', 1)
    ->tap(function($collection){
        return var_dump($collection->pluck('name'));
    });

Thực thi đoạn code trên, lần tap đầu tiên in ra:
David Charleston, Megan Tarash, Jonathan Phaedrus, Paul Jackson
Lần tap thứ 2:
David Charleston, Megan Tarash, Jonathan Phaedrus

Tap vs Pipe

Laravel cung cấp một hàm tương tự tap tên pipe và chúng có điểm chung là có thể thực thi trong một collection pipeline. Tuy nhiên chúng khác nhau ở một điểm chính: tap cho phép bạn làm gì đó với data mà không ảnh hưởng gì tới data gốc. Ngược lại, pipe sẽ chỉnh sửa kết quả được trả về từ hàm này dựa trên giá trị trả về.
Ví dụ hàm pipe:
return collect($items)
    ->where('active', 1)
    ->pipe(function ($collection) {
        return $collection->push(['name' => 'John Doe']);
Đoạn code trên sẽ trả về kết quả:
David Charleston, Megan Tarash, Jonathan Phaedrus, Paul Jackson, John Doe
Như vậy là dữ liệu gốc đã bị thay đổi khi dùng hàm pipe.

Tham khảo

https://laravel-news.com/collection-tap

Nhận xét

Bài đăng phổ biến từ blog này

Base64 image – Lợi hay hại?