
Eloquent Collections trong Laravel là một tính năng mạnh mẽ cho phép bạn làm việc với tập hợp các model được truy vấn từ cơ sở dữ liệu. Mỗi khi bạn thực hiện một truy vấn Eloquent, kết quả trả về thường là một đối tượng của Illuminate\Database\Eloquent\Collection
. Các Eloquent Collection mở rộng từ Laravel Collection, cung cấp các phương thức hữu ích để thao tác và xử lý dữ liệu một cách dễ dàng.
1. Tổng quan về Eloquent Collections
Khi bạn truy xuất nhiều bản ghi từ cơ sở dữ liệu bằng Eloquent, Laravel sẽ trả về một Collection chứa các model. Ví dụ:
$users = User::all();
Biến $users
ở đây sẽ là một instance của Illuminate\Database\Eloquent\Collection
, chứa tất cả các đối tượng User
trong cơ sở dữ liệu.
Eloquent Collections cung cấp các phương thức mạnh mẽ cho phép bạn duyệt qua, lọc, sắp xếp, và biến đổi các tập hợp model mà không cần phải viết mã phức tạp.
2. Phương thức phổ biến trong Eloquent Collections
append
Phương thức
append
cho phép bạn thêm các thuộc tính ảo vào một collection. Các thuộc tính này không có trong cơ sở dữ liệu nhưng được định nghĩa trong model thông qua Accessors.Ví dụ:
$users = User::all()->append('full_name');
Ở đây,
full_name
là một accessor được định nghĩa trong modelUser
. Thuộc tính này sẽ được thêm vào mỗi model trong collection.-
contains
Phương thức
contains
kiểm tra xem collection có chứa một phần tử cụ thể không. Bạn có thể kiểm tra bằng cách so sánh giá trị thuộc tính hoặc kiểm tra đối tượng model.Ví dụ:
$containsUser = $users->contains('id', 1); $containsUser = $users->contains($someUser);
Phương thức này trả về
true
nếu collection chứa phần tử, ngược lại trả vềfalse
. -
diff
Phương thức
diff
so sánh hai collection và trả về phần tử có trong collection hiện tại nhưng không có trong collection so sánh.Ví dụ:
$users1 = User::where('status', 'active')->get(); $users2 = User::where('status', 'inactive')->get(); $diff = $users1->diff($users2);
Kết quả là các phần tử có trong
$users1
nhưng không có trong$users2
. -
except
Phương thức
except
tạo một collection mới bằng cách loại bỏ các phần tử có khóa hoặc chỉ số cụ thể.Ví dụ:
$users = User::all(); $usersExceptFirst = $users->except([0]);
Kết quả là một collection mới không chứa phần tử tại chỉ số
0
. -
find
Phương thức
find
tìm kiếm phần tử trong collection dựa trên giá trị của khóa chính.Ví dụ:
$user = $users->find(1);
Phương thức này trả về model có ID là
1
, hoặcnull
nếu không tìm thấy. -
6.
fresh
Phương thức
fresh
tải lại model từ cơ sở dữ liệu, cập nhật các thuộc tính của model với giá trị mới nhất.Ví dụ:
$user = User::find(1); $user->name = 'New Name'; $user->fresh();
Sau khi gọi
fresh()
, các thuộc tính của model sẽ được làm mới từ cơ sở dữ liệu. -
intersect
Phương thức
intersect
trả về phần giao nhau của hai collection.Ví dụ:
$users1 = User::where('status', 'active')->get(); $users2 = User::where('status', 'inactive')->get(); $intersect = $users1->intersect($users2);
Kết quả là các phần tử có trong cả
$users1
và$users2
. -
load
Phương thức
load
eager load các quan hệ cho collection của các model.Ví dụ:
$users = User::all()->load('posts');
Phương thức này sẽ tải trước quan hệ
posts
cho tất cả người dùng trong collection. -
loadMissing
Phương thức
loadMissing
tương tự nhưload
, nhưng chỉ tải các quan hệ còn thiếu, không tải lại các quan hệ đã được tải trước đó.Ví dụ:
$users = User::with('posts')->get(); $users->loadMissing('comments');
comments
chỉ được tải nếu chưa được tải từ trước đó. -
modelKeys
Phương thức
modelKeys
trả về một collection chứa các khóa chính của các model trong collection.Ví dụ:
$keys = $users->modelKeys();
Kết quả là một mảng các ID của các người dùng trong collection.
-
makeVisible
Phương thức
makeVisible
thêm các thuộc tính ẩn vào collection, làm cho chúng có thể truy cập được.Ví dụ:
$users = User::all()->makeVisible(['secret_field']);
secret_field
sẽ được thêm vào thuộc tính của model trong collection. -
makeHidden
Phương thức
makeHidden
ẩn các thuộc tính khỏi collection.Ví dụ:
$users = User::all()->makeHidden(['secret_field']);
secret_field
sẽ bị ẩn và không còn có thể truy cập được. -
only
Phương thức
only
tạo một collection mới chỉ với các phần tử có khóa cụ thể.Ví dụ:
$users = User::all()->only(['id', 'name']);
Kết quả là một collection mới chỉ chứa các trường
id
vàname
. -
setVisible
Phương thức
setVisible
thiết lập các thuộc tính của model mà bạn muốn hiển thị trong collection.Ví dụ:
$users = User::all()->setVisible(['name', 'email']);
Chỉ các thuộc tính
name
vàemail
sẽ được hiển thị trong collection. -
setHidden
Phương thức
setHidden
thiết lập các thuộc tính của model mà bạn muốn ẩn trong collection.Ví dụ:
$users = User::all()->setHidden(['password']);
Thuộc tính
password
sẽ bị ẩn và không được hiển thị. -
toQuery
Phương thức
toQuery
trả về một query builder cho collection.Ví dụ:
$query = User::all()->toQuery();
$query
là một instance củaIlluminate\Database\Eloquent\Builder
và có thể tiếp tục được sử dụng để thực hiện các truy vấn. -
unique
Phương thức
unique
loại bỏ các phần tử trùng lặp trong collection dựa trên một thuộc tính hoặc một hàm callback.Ví dụ:
$uniqueUsers = $users->unique('email');
Kết quả là một collection mới chỉ chứa các người dùng có email duy nhất.
Ngoài ra, bạn có thể tham khảo thêm các method khác tại đây
Danh mục
Bài viết liên quan

Quản Lý Thời Gian Tự Động Trong Eloquent
Author: | ADMIN |
---|

Các Mối Quan Hệ Trong Eloquent
Author: | ADMIN |
---|

Basic Eloquent Model and MVC
Author: | ADMIN |
---|

Eager Loading
Author: | ADMIN |
---|
Bài viết khác

Blade Basics
Author: | ADMIN |
---|

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel
Author: | ADMIN |
---|

Hiển thị giá trị trong Blade
Author: | ADMIN |
---|