Chào các bạn,
Nay mình sẽ đi qua một feature cũng khá là hay mà Laravel đã cung cấp cho chúng ta. Đó chính là: Laravel Collection.
Nếu các bạn đã làm việc với C# (.NET) thì chắc cũng sẽ biết sơ sơ collection là gì và nó hỗ trợ cho chúng ta cái gì.
Với Laravel cũng tương tự như vậy. nó sẽ wrap lại cái array của các bạn lại để sử dụng và xử lý data tốt hơn. Nó cung cấp cho bạn khá là nhiều methods để sử dụng thay vì ta fải sử dụng các function array của PHP (mất công nhớ :v).
Nếu các bạn đã sử dụng PHPStorm, nó sẽ suggest đầy đủ method cho bạn khi sử dụng, quá ngon nhỉ 😀
1/ Khởi tạo Laravel Collection
Ta sẽ dùng global helper function của Laravel để khởi tạo ra 1 collection:
// normal array
$collection = collect([1, 2, 3]);
// assoc array
$collection = collect([
['first_name' => 'ABC', 'last_name' => 'XYZ'],
['first_name' => 'Hello', 'last_name' => 'SethPhat'],
]);
$collection = collect([
'first_name': 'Seth Phat',
'last_name': 'Blog',
'Age': '22',
'Website': 'https://SethPhat.com',
'introduce': 'Hello world'
]);
Ngoài ra, khi các bạn query với Eloquent Model và sử dụng method ->get(), nó sẽ trả về cho bạn 1 Laravel Collection:
// this is a laravel collection
$listUser = UserModel::all();
$listUser = UserModel::where('ID', '>', '0')->get();
2/ Một số methods thường dùng trong Laravel Collection
First & Last
Dùng để lấy phần tử đầu tiên hay cuối cùng trong collection:
// this is a laravel collection
$listUser = UserModel::all();
// first user
$first_user = $listUser->first();
// last user
$last_user = $listUser->last();
Where
Dùng để filter các phần tử theo 1 điều kiện nào đó (hàm where này tương tự như DB Where)
// this is a laravel collection
$listUser = UserModel::all();
// filter user by name
$filteredUsers = $listUser->where('Name', 'SethPhat');
Count
Dùng để lấy tổng số phần tử trong collection
// this is a laravel collection
$listUser = UserModel::all();
// total user
$total = $listUser->count();
SortBy
Dùng để sắp xếp collection
// this is a laravel collection
$listUser = UserModel::all();
// sort by age asc
$age_sorted = $listUser->sortBy('Age');
// sort by age desc
$age_sorted = $listUser->sortByDesc('Age');
Note: các bạn có thể dùng sortByDesc để sắp xếp từ cao xuống thấp.
Pluck
Dùng để sinh ra 1 array theo một property nào đó, sẽ sinh ra assoc array nếu truyền vào 2 property
Với loại truyền vào 2 params, ta thường dùng để nó tạo ra 1 mảng sử dụng cho control select (id – text) 😀
// this is a laravel collection
$listUser = UserModel::all();
// pluck to get ID only
$age_sorted = $listUser->pluck('ID'); //[1,2,3,...]
// pluck to get assoc ID => Name
$age_sorted = $listUser->sortByDesc('Name', 'ID'); //[1 => 'ABC', 2 => 'XYZ',...]
Contains
Tìm xem giá trị có trong mảng hay không
// this is a laravel collection
$listUser = UserModel::all();
// find if SethPhat existed in $listUser
$haveUserName = $listUser->contains('SethPhat');
…
Và còn rất là nhiều methods nữa, các bạn có thể tìm hiểu đầy đủ tại đây: https://laravel.com/docs/5.6/collections#available-methods
3/ Kết luận
Vậy với Laravel Collection, dường như việc xử lý và tương tác, sử dụng data bằng array nó đơn giản và dễ chịu hơn nhỉ? 😀
Các bạn thử trải nghiệm qua nhé, rất hay đấy 😀
Cám ơn các bạn đã quan tâm theo dõi!
Tìm hiểu thêm về Laravel tại: https://sethphat.com/sp-category/lap-trinh/laravel-5-php