Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Có thể sử dụng tải trọng được sử dụng với các mối quan hệ lồng nhau


Có thể sử dụng tải trọng được sử dụng với các mối quan hệ lồng nhau


Có, `loadMissing` có thể được sử dụng với các mối quan hệ lồng nhau ở Laravel, nhưng có một số sắc thái cần nhận thức được.

`loadmissing` là gì?

Phương pháp `loadMissing` trong Laravel Eloquent chỉ được sử dụng để háo hức các mối quan hệ tải nếu chúng chưa được tải trên thể hiện mô hình. Điều này giúp tránh các truy vấn dự phòng bằng cách kiểm tra xem dữ liệu mối quan hệ đã có mặt trước khi truy vấn cơ sở dữ liệu một lần nữa [6].

Sử dụng `loadMissing` với các mối quan hệ lồng nhau

- Bạn có thể chỉ định các mối quan hệ lồng nhau trong ký hiệu DOT với `loadMissing`, chẳng hạn như` 'Author.Contacts'`, để tải mối quan hệ lồng nhau chỉ khi bị thiếu [7].
- Tuy nhiên, có một hành vi đã biết trong đó nếu bạn `loadMissing` một mối quan hệ lồng nhau của một mối quan hệ đã được tải, Laravel có thể tự tải lại mối quan hệ cha mẹ. Ví dụ: nếu bạn đã tải `Chữ khắc 'trên một mô hình, thì hãy gọi` loadMissing (' Chữ khắc.
- Điều này có nghĩa là trong khi `loadMissing` hỗ trợ các mối quan hệ lồng nhau, nó có thể kích hoạt tải lại các mối quan hệ trung gian nếu chúng được tải trước đó nhưng không có mối quan hệ lồng nhau.

Cân nhắc thực tế

- `loadMissing` rất hữu ích khi bạn muốn có điều kiện háo hức các mối quan hệ tải, ngăn chặn các truy vấn trùng lặp nếu mối quan hệ đã được tải.
- Đối với các mối quan hệ lồng nhau, bạn nên lưu ý rằng việc tải mối quan hệ lồng nhau bị thiếu từ mối quan hệ cha mẹ được tải trước đó có thể gây ra mối quan hệ cha mẹ để tải lại, có thể ảnh hưởng đến hiệu suất.
- Nếu bạn muốn tránh các tải lại như vậy, bạn có thể cần phải quản lý cẩn thận khi nào và cách bạn tải các mối quan hệ lồng nhau hoặc xem xét việc tải chúng lên trước với `với ()`.

Bản tóm tắt

- Có, `loadMissing` có thể được sử dụng với các mối quan hệ lồng nhau bằng cách sử dụng ký hiệu dấu chấm.
- Nó chỉ tải các mối quan hệ lồng nhau nếu chúng bị mất tích.
- Nhưng nếu mối quan hệ cha mẹ được tải mà không có mối quan hệ lồng nhau, `loadMissing` có thể tải lại mối quan hệ cha mẹ để tìm nạp dữ liệu lồng nhau [1] [6] [7].

Hành vi này rất quan trọng để ghi nhớ để tránh nhiều truy vấn bất ngờ khi làm việc với tải háo hức lồng nhau ở Laravel.

Trích dẫn:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nested-relation-in-graphql
[3] https://compositecode.blog/2023/07/25/graphQl
[4] https://github.com/fifemon/graphql-datasource/issues/15
[5] https://www.sea-ql.org/sea-orm-cookbook/001-how-to-load-nested-relation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-purpose-of-the-loadmissing-function
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eager-loading-of-multiple-nested-relationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries