So sánh Lazy Collection và Collection trong laravel 6.0

Trong bản cập nhật Laravel 6.0, có một thứ đáng để chúng ta quan tâm là LazyCollection. Vậy LazyCollection có ưu, nhược điểm gì so với Collection.
Giả sử chúng ta có 10,000 dữ liệu User, và query theo 2 cách:

  • Cách 1: $users = User::all()

  • Cách 2: $users = User::cursor()

Kết quả trả về :

  • Cách 1:

  • Cách 2:

Như vậy, với cách 1, tất cả 10,000 dữ liệu được tải về cùng một lúc. Với cách 2, dữ liệu chỉ được tải về khi được gọi tới sử dụng.

Câu hỏi ở đây là dữ liệu từ LazyCollection được gọi tới sử dụng như thế nào? không trả về dữ liệu thì khi dữ liệu được gọi tới sử dụng sẽ query lên database? với một dữ liệu lớn cần in ra sử dụng foreach thì sẽ xử lý như nào?

Câu trả lời là LazyCollection sử dụng yield của php thay cho return như Collection.

Yield trong PHP có gì đặc biệt ?

Nếu ở view với mô hình 10,000 dữ liệu sử dụng foreach để hiển thị thì LazyCollection và Collection có gì khác nhau ?

foreach($users as $user)

  • Collection:

  • LazyCollection:

Vậy LazyCollection giúp chúng ta thao tác với cơ sở dữ liệu rất lớn nhưng vẫn giữ mức sử dụng bộ nhớ thấp hơn rất nhiều so với Collection.

Xem thêm bài cùng chuyên mục : Laravel 6.0 có gì mới ?

P/s:
Nếu có vẫn gặp vướng mắc trong khi thực hành hoặc có bất kì thắc mắc về PHP, Laravel hay muốn tìm hiểu thêm các thông tin hữu ích, các bạn hãy tham gia group Laravel VietNam để được các admin và thành viên support trực tiếp vấn đề mà bạn gặp phải nhé.

Related article