- vừa được xem lúc

2 Common Mistakes I Make When Eager Loading in Laravel

0 0 23

Người đăng: Lâm Luis

Theo Viblo Asia

1. What is eager loading ?

Laravel là một trong những framework của php phổ biến hiện nay, được cộng đồng php developer yêu thích và sử dụng.

Query Performance là chủ đề mà nhiều bạn khi mới bắt đầu tiếp cận laravel có thể chưa quan tâm đến, nhưng nó lại là một vấn đề hết sức quan trọng trong hệ thống.

Khi chúng ta sử dụng Eloquent Relationships trong laravel, mặc định nó sẽ ở chế độ "lazy" khi load lên tất cả các model quan hệ (relation), vấn đề anh em hay gặp phải là N + 1 Query.

Eager Loading sẽ giúp rút ngắn các câu query trong thao tác với database để giải quyết vấn đề này, nhưng trong quá trình sử dụng cũng thường hay mắc phải những lỗi liên quan đến em nó, sô đây tui xin chia sẻ cho quý zị những lỗi thường gặp nhé:

  • ID OMMISION
  • WHITE SPACING

2. ID OMMISION

Để giải quyết vấn đề lazy loading chúng ta hay sử dụng phương thức with() như sau:

protected $with = ['company'];

Khai báo trên sẽ load tất cả các cột của relationship được liên kết. Nhưng nếu bạn muốn Load mỗi cột name, thông thường theo thúa quen ta hay làm:

protected $with = ['company:name'];

Vấn đề gặp phải là nó sẽ không lấy được cột name của Company, để khắc phục điều nay thì bạn phải thêm id cho nó như sau:

protected $with = ['company:id,name'];

Để load các columns cụ thể trong relationship, thì bạn phải truyền thêm ID cho nó nhé !

3. WHITE SPACING

protected $with = ['company:id,name']; #This will cause an error
protected $with = ['company:id, name'];

Khi bạn thêm 1 khoảng trắng trước cột name sẽ được coi là một phần của name và do đó khi Laravel cố gắng tải truy vấn của bạn, nó sẽ trả về một lỗi cho bạn biết rằng cột đó không tồn tại. Bạn sẽ rất khó để ý chỗ này vì khoảng trắng rất có thể sẽ không xảy ra với bạn trong thông báo lỗi của bạn.

4. Conclude

Eager Loading đã khiến việc xây dựng các ứng dụng web mạnh mẽ trở nên rất dễ dàng với Laravel.

Nếu bạn chưa quen với nó hoặc muốn đọc thêm, hãy truy cập tài liệu chính thức ở đây officail docs

Tiện thể tôi chia sẻ với các bạn 1 packages rất hay về việc giúp giám sát các truy vấn của chúng ta trong khi phát triển ứng dụng, thông báo khi nào nên thêm Eager Loading (khi có N+1 query) đó là Laravel Query Detector, anh em có thể install nó vồ project của mình nhé !

Thân ái, chồ tộm biệt , quyết thắng !

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 375

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 464

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

Ví dụ CRUD với Laravel và Vuejs.

1. Cài đặt Laravel. composer create-project --prefer-dist laravel/laravel vuelaravelcrud. .

0 0 163

- vừa được xem lúc

Một số tips khi dùng laravel (Part 1)

1. Show database query in raw SQL format. DB::enableQueryLog(); // Bật tính năng query logging. DB::table('users')->get(); // Chạy truy vấn bạn muốn ghi log.

0 0 87

- vừa được xem lúc

Inertiajs - Xây dựng Single Page App không cần API

Tiêu đề là mình lấy từ trang chủ của https://inertiajs.com/ chứ không phải mình tự nghĩ ra đâu nhé :v. Lâu lâu rồi chưa động tới Laravel (dự án cuối cùng mình code là ở ver 5.8), thế nên một ngày đẹp trời lượn vào đọc docs ver 8.

0 0 242