Laravel là một trong những framework phổ biến nhất hiện nay, được sử dụng để xây dựng các ứng dụng web động. Nó cung cấp nhiều tính năng hữu ích, bao gồm cả Collection - một cách tiện lợi để làm việc với mảng và tập hợp dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu về Collection trong Laravel và cách sử dụng nó để giải quyết các vấn đề liên quan đến dữ liệu trong ứng dụng của bạn.
Laravel Collection là gì? Tổng quan về Laravel Collection
Collection là một trong những tính năng mạnh mẽ của Laravel framework, cung cấp nhiều phương thức để bạn có thể làm việc dễ dàng với mảng và tập hợp dữ liệu. Với Collection, bạn có thể thực hiện nhiều thao tác như lọc, sắp xếp, đếm, phân trang...Laravel Collection được sử dụng rộng rãi trong Laravel và cung cấp rất nhiều lợi ích trong việc xử lý dữ liệu.
Collection trong Laravel là một đối tượng có thể lặp lại, đại diện cho một tập hợp các đối tượng. Nó được cung cấp bởi lớp Illuminate\Support\Collection, và có thể được tạo ra từ mảng hoặc đối tượng đại diện cho một tập hợp.
==> Tham khảo thêm: Laravel là gì? Ưu và nhược điểm của Laravel
Tại sao cần sử dụng Laravel Collection?
Laravel Collection là một trong những tính năng quan trọng trong Laravel Framework. Nó cung cấp một cách tiếp cận đơn giản và mạnh mẽ để làm việc với các bộ sưu tập dữ liệu trong Laravel. Điều này đặc biệt hữu ích khi làm việc với các bảng trong Cơ sở dữ liệu.
Trong Laravel, Collection cũng được sử dụng để xử lý các kết quả trả về từ các truy vấn cơ sở dữ liệu. Bằng cách này, chúng ta có thể lọc, sắp xếp, tìm kiếm, chuyển đổi và thực hiện các tác vụ khác trên các tập hợp dữ liệu với cú pháp ngắn gọn và dễ hiểu.
Các tính năng chính của Laravel Collection
- Dễ sử dụng: Collection là một cấu trúc dữ liệu đơn giản và dễ sử dụng, điều này giúp cho việc làm việc với dữ liệu trở nên đơn giản hơn rất nhiều.
- Khả năng xử lý dữ liệu mạnh mẽ: Collection cung cấp nhiều phương thức xử lý dữ liệu như lọc, sắp xếp, chuyển đổi, tìm kiếm, giới hạn, cắt, nối, đảo ngược, ... giúp cho việc xử lý dữ liệu trở nên dễ dàng và hiệu quả hơn.
- Tính tái sử dụng: Collection cho phép chúng ta tái sử dụng các phương thức xử lý dữ liệu, điều này giúp cho việc phát triển ứng dụng trở nên đơn giản hơn rất nhiều.
- Hỗ trợ nhiều định dạng: Collection có thể được chuyển đổi sang các định dạng khác như JSON, Array, ...
Cách tạo một Collection trong Laravel
Để tạo một Collection trong Laravel, bạn có thể sử dụng phương thức collect()
hoặc truyền một mảng vào hàm khởi tạo của lớp Collection
.
Ví dụ:
use Illuminate\Support\Collection;
// Tạo Collection từ một mảng
$collectionFirst = collect([1, 2, 3, 4, 5]);
// Tạo Collection từ một đối tượng đại diện cho tập hợp
// using Illuminate\Support\Collection;
$collectionSecond = new Collection($myObjects);
Hoặc bạn có thể tạo một Laravel Collection từ một truy vấn cơ sở dữ liệu:
// Bạn cũng có thể tạo một Laravel Collection từ một đối tượng bằng cách sử dụng phương thức collect():
$user = new User;
$collection = collect($user);
// Hoặc bạn có thể tạo một Laravel Collection từ một truy vấn cơ sở dữ liệu:
$users = DB::table('users')->get();
$collection = collect($users);
Các phương thức trong Laravel Collection
Laravel Collection cung cấp rất nhiều phương thức để thao tác với dữ liệu. Dưới đây là một số phương thức phổ biến trong Laravel Collection:
Phương thức `all()`
Phương thức all sẽ trả về một mảng như ví dụ phía dưới
$collection = collect([1, 2, 3]);
$all = $collection ->all();
// [1,2,3]
Phương thức `avg()`
Phương thức avg()
trả về giá trị trung bình của các mục trong Collection.
$collection = collect([1, 2, 3]);
$avg = $collection->avg();
Phương thức `count()`
Phương thức count()
trả về số lượng các mục trong Collection.
$collection = collect([1, 2, 3]);
$count = $collection->count();
// return 3
Phương thức `first()`
Phương thức first()
trả về phần tử đầu tiên trong Collection.
$collection = collect([1, 2, 3]);
$first = $collection->first();
// return 1
Phương thức `last()`
Phương thức last()
trả về phần tử cuối cùng trong Collection.
$collection = collect([1, 2, 3]);
$last = $collection->last();
// return 3
Phương thức `map()`
Phương thức map()
được sử dụng để thực hiện một hành động trên mỗi mục trong Collection và trả về một Collection mới.
$collection = collect([1, 2, 3]);
$multiplied = $collection->map(function ($item, $key) {
return $item * 2;
});
// return [1,4,6]
Phương thức `filter()`
Phương thức filter()
được sử dụng để lọc các mục trong Collection dựa trên một điều kiện.
$collection = collect([1, 2, 3, 4, 5]);
$filtered = $collection->filter(function ($item, $key) {
return $item % 2 == 0;
});
// return [2,4]
Phương thức `pluck()`
Phương thức pluck()
trả về một Collection mới với giá trị của một trường được chỉ định trong các mục của Collection.
$collection = collect([
['name' => 'John', 'age' => 15],
['name' => 'Jane', 'age' => 30],
['name' => 'James', 'age' => 35],
]);
$names = $collection->pluck('name');
Phương thức `sortBy()`
Phương thức sortBy()
được sử dụng để sắp xếp các mục trong Collection dựa trên một trường.
$collection = collect([
['name' => 'John', 'age' => 15],
['name' => 'Jane', 'age' => 30],
['name' => 'James', 'age' => 35],
]);
$sorted = $collection->sortBy('age');
Phương thức `sort()`
Phương thức sort() dùng để sắp xếp các phần tử trong collection theo thứ tự tăng dần hoặc giảm dần.
$numbers = collect([5, 3, 1, 4, 2]);
$sorted = $numbers->sort();
// Kết quả: collect([1, 2, 3, 4, 5])
Phương thức `groupBy()`
Phương thức groupBy()
được sử dụng để nhóm các mục trong Collection dựa trên một trường.
$collection = collect([
['name' => 'John', 'gender' => 'male'],
['name' => 'Jane', 'gender' => 'female'],
['name' => 'James', 'gender' => 'male'],
['name' => 'Jenny', 'gender' => 'female'],
]);
$grouped = $collection->groupBy('gender');
Phương thức `reduce`
Phương thức reduce
được sử dụng để tính toán một giá trị từ các phần tử của Collection bằng cách truyền một hàm vào. Hàm này sẽ được áp dụng cho mỗi phần tử trong Collection và kết quả trả về của hàm sẽ được sử dụng để tính toán giá trị cuối cùng.
$numbers = collect([1, 2, 3, 4, 5]);
$sum = $numbers->reduce(function ($carry, $number) {
return $carry + $number;
});
$sum; // 15
Phương thức `unique()`
Phương thức unique() dùng để loại bỏ các phần tử trùng lặp trong collection và trả về một collection mới chỉ chứa các phần tử duy nhất.
$colors = collect(['red', 'blue', 'green', 'red', 'yellow']);
$uniqueColors = $colors->unique();
// Kết quả: collect(['red', 'blue', 'green', 'yellow'])
Phương thức `diff()`
Phương thức này trả về một Collection chứa các mục không có trong Collection khác.
$collection = collect([1, 2, 3, 4, 5]);
$diff = $collection->diff([2, 4, 6]);
Kết quả:
[1, 3, 5]
Phương thức `combine()`
Phương thức này kết hợp hai Collection lại với nhau để tạo thành một mảng liên kết.
$keyed = collect(['name', 'age']);
$value = collect(['John Doe', 30]);
$combined = $keyed->combine($value);
Kết quả:
['name' => 'John Doe', 'age' => 30]
Trên đây là một số phương thức phổ biến của Laravel collection cùng với ví dụ minh họa. Tuy nhiên, Laravel collection còn rất nhiều phương thức khác. Dưới đây là ví dụ về tất cả các phương thức của Collection:
Phương thức | Mô tả |
---|---|
all | Trả về tất cả các item trong collection |
avg | Trả về giá trị trung bình của các item trong collection |
chunk | Chia collection thành các chunk với kích thước được chỉ định |
collapse | Hợp nhất nhiều collection thành một collection duy nhất |
combine | Kết hợp collection với một collection khác hoặc một mảng để tạo ra một collection mới |
concat | Hợp nhất collection với một collection hoặc một mảng khác |
contains | Kiểm tra xem collection có chứa một giá trị được chỉ định hay không |
count | Trả về số lượng item trong collection |
crossJoin | Kết hợp mọi giá trị của các collection được chỉ định |
dd | In collection và kết thúc chương trình |
diff | Trả về sự khác biệt giữa hai collection |
diffAssoc | Trả về sự khác biệt với các key của hai collection |
diffKeys | Trả về sự khác biệt với các key của hai collection |
dump | In collection |
duplicates | Trả về tất cả các item trùng lặp trong collection |
each | Lặp qua từng item trong collection và áp dụng hàm được chỉ định |
every | Kiểm tra xem mọi item trong collection có thỏa mãn điều kiện được chỉ định hay không |
except | Trả về một collection mới với các item được loại bỏ theo key được chỉ định |
filter | Trả về một collection mới với các item đã được lọc qua hàm được chỉ định |
first | Trả về phần tử đầu tiên trong collection |
firstWhere | Tìm kiếm phần tử đầu tiên có giá trị được chỉ định trong collection |
flatMap | Áp dụng hàm được chỉ định cho từng item trong collection và hợp nhất kết quả |
flatten | Giảm độ sâu của collection thành một collection duy nhất |
flip | Đảo ngược key và value của collection |
forget | Loại bỏ một phần tử theo key được chỉ định |
forPage | Trả về một phân đoạn của collection với kích thước và số trang được chỉ định |
get | Lấy phần tử theo key được chỉ định |
groupBy | Nhóm collection theo giá trị của một key được chỉ định |
has | Kiểm tra xem collection có chứa một key được chỉ định hay không |
implode | Ghép các giá trị của collection thành một chuỗi duy nhất |
intersect | Trả về các giá trị chung giữa hai collection |
intersectByKeys | Trả về các giá trị chung giữa hai collection với các key được chỉ định |
where | Lọc collection với điều kiện cho trước. |
whereIn | Lọc collection với điều kiện cho trước trên một trường cụ thể. |
pluck | Lấy ra giá trị của một trường cụ thể trên tất cả các phần tử của collection. |
flatten | Chuyển collection thành một mảng đơn giản, không có các collection lồng nhau. |
forget | forget Xóa một phần tử trong collection với khóa cho trước. |
isEmpty | Kiểm tra collection có rỗng hay không. |
forPage | Trả về một collection mới chứa phần tử nằm trong trang được chỉ định bởi số lượng phần tử và số trang. |
flip | Hoán đổi key và value của collection, nghĩa là key sẽ trở thành value và value sẽ trở thành key. |
flatMap | Lấy tất cả các giá trị của mỗi phần tử trong một collection và trả về một collection mới chỉ bao gồm các giá trị không trùng lặp. |
Cách phân trang với Laravel Collection
Nếu bạn có một Collection lớn và muốn phân trang các phần tử trong đó, Laravel cung cấp phương thức paginate()
để giải quyết vấn đề này. Phương thức này sẽ trả về một đối tượng LengthAwarePaginator
chứa các phần tử được phân trang. Ví dụ:
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
// Phân trang Collection với mỗi trang có 3 phần tử
$paginatedCollection = $collection->paginate(3);
// Kết quả: Illuminate\Pagination\LengthAwarePaginator {#323 ▼
// #total: 10
// #lastPage: 4
// #items: Illuminate\Support\Collection {#347 ▼
// #items: array:3 [▼
// 0 => 1
// 1 => 2
// 2 => 3
// ]
// }
// }
Kết luận
Bài viết trên đã giới thiệu cho các bạn về Laravel Collection trong laravel cũng như các phương thức và tính năng của nó. Collection là một công cụ rất mạnh mẽ và tiện ích trong việc xử lý dữ liệu trong Laravel. Bằng cách sử dụng Collection, bạn có thể xử lý dữ liệu một cách linh hoạt và hiệu quả hơn, đồng thời giúp tăng tốc độ và hiệu suất của ứng dụng của bạn.
Bạn có thể tham khảo thêm bài viết về: