Eloquent Collections
16461

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 model User. 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ặc null 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$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 idname.

  • 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 nameemail 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ủa Illuminate\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


  1. Khác
  2. ThreeJS
  3. Ubuntu/Linux
  4. HTML/CSS
  5. Git
  6. Amazon Web Services
  7. Javascript
  8. Docker
  9. Laravel

Bài viết liên quan


Quản Lý Thời Gian Tự Động Trong Eloquent

Quản Lý Thời Gian Tự Động Trong Eloquent

01.08.2024
Author: ADMIN
Khám phá cách quản lý timestamps trong Eloquent Laravel: tắt tự động cập nhật, tùy chỉnh định dạng, đổi tên cột và cập nhật dữ liệu mà không ảnh hưởng updated_at.
Các Mối Quan Hệ Trong Eloquent

Các Mối Quan Hệ Trong Eloquent

01.08.2024
Author: ADMIN
Tìm hiểu cách thiết lập và sử dụng các mối quan hệ trong Eloquent Laravel, giúp quản lý dữ liệu dễ dàng và linh hoạt hơn.
Basic Eloquent Model and MVC

Basic Eloquent Model and MVC

01.08.2024
Author: ADMIN
Tìm hiểu cách Laravel triển khai kiến trúc MVC với Model, View, Controller. Hướng dẫn chi tiết về Eloquent, xử lý logic trong Controller và hiển thị dữ liệu với Blade.
Eager Loading

Eager Loading

01.08.2024
Author: ADMIN
Eager Loading trong Eloquent giúp tối ưu hiệu suất bằng cách giảm số lượng truy vấn không cần thiết. Tìm hiểu cách sử dụng with, withCount và nested eager loading cho các mối quan hệ phức tạp!

Bài viết khác

Routing

Routing

01.08.2024
Author: ADMIN
Hướng dẫn chi tiết về Basic Routing trong Laravel, từ cách định nghĩa route, sử dụng middleware, route caching đến route naming giúp tối ưu hóa ứng dụng.
Blade Basics

Blade Basics

01.08.2024
Author: ADMIN
Khám phá Blade trong Laravel: từ if-else, loops, kế thừa layout đến include sub-views. Giúp code gọn gàng, dễ quản lý và bảo trì hơn!
9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

01.08.2024
Author: ADMIN
Khám phá 9 mẹo Blade giúp bạn viết code Laravel sạch, tối ưu và chuyên nghiệp hơn. Từ @forelse, @auth, @guest, đến format ngày, tối ưu SEO – tất cả trong một bài viết súc tích, dễ áp dụng!
Hiển thị giá trị trong Blade

Hiển thị giá trị trong Blade

01.08.2024
Author: ADMIN
Hướng dẫn hiển thị biến trong Laravel Blade: escape HTML tự động, hiển thị dữ liệu thô, giá trị mặc định và cách truy xuất mảng, đối tượng. Giúp bạn tối ưu hiển thị dữ liệu một cách an toàn!