12/08/2018, 15:02

[Phần 1] Laravel Collection

Trong quá trình làm việc với Laravel 5.x chắc hẳn mình đã làm việc với collection. Hôm nay trong bài viết này mình xin giới thiệu 1 vài helper thông dụng để tương tác với Collection. collect: Tạo collection từ array $$rray = ['php', 'java', 'ruby', 'ios']; Convert array này thành ...

Trong quá trình làm việc với Laravel 5.x chắc hẳn mình đã làm việc với collection. Hôm nay trong bài viết này mình xin giới thiệu 1 vài helper thông dụng để tương tác với Collection.

  1. collect: Tạo collection từ array
  • $$rray = ['php', 'java', 'ruby', 'ios'];
  • Convert array này thành collection bằng cách nào ?
  • Solution:
//cách 1
$exampleArray = ['php', 'java', 'ruby', 'ios'];
$collection = collect($exampleArray);

//cách 2
use class IlluminateSupportCollection;
$collection = Collection::make($exampleArray);
  1. Lists
  • Method này trả về một mảng có cặp key,value.
  • Hãy hình dung ta có một collection là dữ liệu trả về từ bảng user và nếu sử dụng câu lệnh như bên dưới thì chúng ta sẽ có một mảng key là id và value là email
  • Cách sử dụng:
$result = $collection->lists('email', 'id');
  1. Filter
  • Giả sử ta có 1 collection sau:
$collection = collect([
    [
        'place_name' => 'example name_1',
        'distance' => 500
    ],
    [
        'place_name' => 'example name_2',
        'distance' => 400
    ],
    [
        'place_name' => 'example name_3',
        'distance' => 300
    ],
    [
        'place_name' => 'example name_4',
        'distance' => 600
    ]
]);
  • Yêu cầu: Lọc những item nào có distance nhỏ hơn hoặc bằng 500
  • Giải pháp: sử dụng helper filter
$result = $collection->filter(function ($item) {
    return $item->distance <= 500;
});
  • khi dump biến result chắc chắn các bạn sẽ nhận được kết quả mong muốn
  1. ToJson, ToArray
  • Nếu như có 1 array convert sang collection thì chúng ta đã biết rồi phải không nào ? Vậy có cách nào làm ngược lại không !? Mình sẽ giới thiệu các bạn helper này, helper toJson(), toArray()
  • Solutions:
$jsonData = $collection->toJson();
$array = $collection->toArray();
  1. Count
  • Mục đích: Đếm số lượng phần tử trong collection
  • Giả sử chúng ta muốn đếm có bao nhiêu user đã tạo bao nhiêu bài post
$totalPost = User::posts()->count();
  1. Sum
  • Tính tổng theo 1 field nhất định trong collection. Có thể truyền callback vào để loc ra data theo điều kiện rồi tính sau.
$collection->sum('price');
  1. SortBy và sortByDesc
//sắp xếp tăng dần
$collection->sortBy('total_viewed'); 

//sắp xếp giảm dần
$collection->sortBy('total_viewed', 'desc'); 
 
//sắp xếp giảm dần
$collection->sortByDesc(function ($item) {
    return $item->user_level;
});

Trong phần tiếp theo mình sẽ giới thiệu một số helper nữa. Cảm ơn các bạn đã tham khảo bài viết của mình !

0