Mọi người thường nói là framework laravel rất mạnh mẽ vậy thì nó mạnh mẽ ở đâu? với tôi thì bất cứ thành phần nào của Laravel đều mạnh mẽ cả. Bài hôm này chúng ta cùng tìm hiểu về 1 thành phần hết sức quan trọng trong laravel là Collection.
Laravel Collection là gì
Laravel Collection là một class cung cấp các phương thức tập trung vào việc xử lý mảng dữ liệu một cách thuận tiệ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. ví dụ về collection:
1 2 3 4 5 6 7 8 9 10 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$users</span> <span class="token operator">=</span> \<span class="token package">App<span class="token punctuation">\</span>User</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// $users là một collection trả về từ model User</span> <span class="token variable">$posts</span> <span class="token operator">=</span> \<span class="token package">App<span class="token punctuation">\</span>User</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">posts</span><span class="token punctuation">;</span> <span class="token comment">// $posts là một collection trả về từ model Post</span> </span> |
Sử dụng Laravel Collection
Khởi tạo collection
Khởi tạo collection bằng cách đơn giản như sau
Khởi tạo thông qua helper collect
$collection = collect([1, 2, 3]);
Khởi tạo qua class Collection
$collection = new \Collection([1, 2, 3, 4, 5]);
Nhìn nó cũng không khác gì tạo mảng nhỉ
Các Collection hay dùng.
Laravel collection có rất nhiều phương thức giúp cho lập trình viên sử lý dữ liệu dễ dàng hơn.
all()
Phương thức này lấy dữ liệu trong collection trả về dữ liệu dạng mảng
$data = Collection::make([1, 2, 3, 4, 5, 6])->all();
//output [1,2,3,4,5,6];
get
Hàm lấy giá trị của phần tử trong mảng.
1 2 3 4 5 6 |
<span class="token variable">$collection</span> <span class="token operator">=</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'viblo'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'website'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'https://viblo.asia'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$value</span> <span class="token operator">=</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">get</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// viblo</span> |
first()
Phương thức first() trả về phần tử đầu tiên trong collection
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">first</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// trả về giá trị đầu tiên trong collection là 1</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">first</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$value</span><span class="token punctuation">,</span> <span class="token variable">$key</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$value</span> <span class="token operator">></span> <span class="token number">2</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 3</span> </span> |
pluck()
Phương thức pluck() sẽ trả về toàn bộ giá trị của một key của mỗi phần tử trong collection
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$collection</span> <span class="token operator">=</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'product_id'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'prod-100'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Desk'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'product_id'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'prod-200'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Chair'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$plucked</span> <span class="token operator">=</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">pluck</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$plucked</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// ['Desk', 'Chair']</span> </span> |
SortBy Hàm sắp xếp lại theo thứ tự tăng dần.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token variable">$collection</span> <span class="token operator">=</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Desk'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'price'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">200</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Chair'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'price'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">100</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Bookcase'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'price'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">150</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$sorted</span> <span class="token operator">=</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">sortBy</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'price'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$sorted</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">values</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">/* [ ['name' => 'Chair', 'price' => 100], ['name' => 'Bookcase', 'price' => 150], ['name' => 'Desk', 'price' => 200], ] */</span> |
Take Hàm giới hạn số lượng trả về.
1 2 3 4 5 6 7 8 |
<span class="token variable">$collection</span> <span class="token operator">=</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$chunk</span> <span class="token operator">=</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">take</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$chunk</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//output [0, 1, 2]</span> |
count Hàm có tác dụng đếm các phần tử trong collections.
1 2 3 4 5 6 |
<span class="token variable">$collection</span> <span class="token operator">=</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">count</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//output 4</span> |
avg Hàm tính giá trị trung bình của các phần tử trong mảng.
1 2 3 |
<span class="token variable">$data</span> <span class="token operator">=</span> Collection<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">avg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//output 3.5</span> |
push()
Phương thức push() sẽ thêm một phần tử mới vào cuối collection
1 2 3 4 5 6 7 8 9 10 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$collection</span> <span class="token operator">=</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">push</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// [1, 2, 3, 4, 5]</span> </span> |
values()
Hàm values() trả về giá một collection mới và tạo các key thành các số nguyên liên tiếp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$collection</span> <span class="token operator">=</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token number">10</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'product'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Desk'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'price'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">200</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token number">11</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span><span class="token single-quoted-string string">'product'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'Desk'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'price'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">200</span><span class="token punctuation">]</span> <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$values</span> <span class="token operator">=</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">values</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$values</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">/* [ 0 => ['product' => 'Desk', 'price' => 200], 1 => ['product' => 'Desk', 'price' => 200], ] */</span> </span> |
chumk Hàm các tác dụng tách một mảng ra thành các mảng con.
1 2 3 4 5 6 |
<span class="token variable">$collection</span> <span class="token operator">=</span> <span class="token function">collect</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$chunks</span> <span class="token operator">=</span> <span class="token variable">$collection</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">chunk</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$chunks</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">toArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//output [[1, 2, 3, 4], [5, 6, 7]]</span> |