Learn and use Collections in Laravel
- Tram Ho
People often say that laravel framework is very powerful so where is it powerful? For me, any Laravel component is powerful. In this article, we will learn about a very important component in laravel, Collection.
What is Laravel Collection?
Laravel Collection is a class that provides methods that focus on handling arrays of data in a convenient way to minimize the time for programmers. Especially as an API to connect to the database because the data returned from the database is of type Collection. collection example:
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> |
Using Laravel Collection
Collection initialization
Initialize the collection by simply doing the following
Initialization via helper collect
$collection = collect([1, 2, 3]);
Initialization via Collection class
$collection = new \Collection([1, 2, 3, 4, 5]);
Doesn’t it look like an array?
Commonly used Collections.
Laravel collection has a lot of methods that make it easier for developers to process data.
all()
This method retrieves data from the collection and returns array data
$data = Collection::make([1, 2, 3, 4, 5, 6])->all();
//output [1,2,3,4,5,6];
get
The function gets the value of the element in the array.
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()
The first() method returns the first element in the 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()
The pluck() method will return the entire value of a key of each element in the 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 The function rearranges in ascending order.
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 The function limits the number of returns.
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 The function counts the elements in 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 The function calculates the average value of the elements in the array.
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()
The push() method will add a new element to the end of the 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()
The values() function returns the value of a new collection and generates the keys to consecutive integers
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 Functions that split an array into sub-arrays.
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> |