Học Laravel – Bài 32: Eloquent: Collections

Giới thiệu Eloquent Collections:

Tất cả method của Eloquent mà trả về nhiều hơn 1 kết quả sẽ trả về 1 instance của Illuminate\Database\Eloquent\Collection, bao gồm cả kết quả truy vấn thông qua get method hoặc tiếp cận qua quan hệ. Eloquent collection extend Laravel base collection, có nhiều chức năng để làm việc dễ dàng.

Collection đóng vai trò là vòng lặp, cho phép bạn lặp qua như 1 array:

use App\Models\User;
 
$users = User::where('active', 1)->get();
 
foreach ($users as $user) {
    echo $user->name;
}

Bạn có thể gỡ những model chưa active và lấy first name của mỗi user còn lại:

$names = User::all()->reject(function (User $user) {
    return $user->active === false;
})->map(function (User $user) {
    return $user->name;
});

Chuyển đổi collection:

Trong khi hầu hết method trả về 1 instance mới của Eloquent collection, những method như collapse, flatten, flip, keys, pluck, zip trả về 1 base collection. Tương tự, nếu map trả về 1 collection mà không có Eloquent model nào, nó sẽ được convert sang base collection.

Các method có sẵn:

Eloquent collection kế thừa base Laravel collection. Ngoài ra Illuminate\Database\Eloquent\Collection class cung cấp nhiều method giúp quản lý model collections. Hầu hết method trả về instance của Eloquent Collection, tuy nhiên một số method như modelKeys trả về 1 base collection.

# append($attributes): method này dùng để biểu thị 1 thuộc tính sẽ được append cho mỗi model trong collection:

$users->append('team');
 
$users->append(['team', 'is_admin']);

# contains($key, $operator = null, $value = null):

Method này để xác định 1 collection có chứa 1 model cho trước hay không. Method này nhận tham số là primary key hoặc model:

$users->contains(1);
 
$users->contains(User::find(1));

# diff($items)

Method này truy xuất tất cả model mà không tồn tại trong collection cho trước:

use App\Models\User;
 
$users = $users->diff(User::whereIn('id', [1, 2, 3])->get());

# except($keys)

Method này trả về tất cả model mà không có những primary key cho trước:

$users = $users->except([1, 2, 3]);

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *