Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 중첩 된 관계와 함께로드 기능을 사용할 수 있습니다


중첩 된 관계와 함께로드 기능을 사용할 수 있습니다


예,`로드 메이징 '은 Laravel에서 중첩 된 관계와 함께 사용할 수 있지만, 잘 알고 있어야 할 뉘앙스가 있습니다.

###`로드 메이징 '이란 무엇입니까?

Laravel Eloquent의 '로드 머싱'방법은 모델 인스턴스에 아직로드되지 않은 경우에만 하중 관계를 열망하는 데 사용됩니다. 이는 데이터베이스를 다시 쿼리하기 전에 관계 데이터가 이미 존재하는지 확인하여 중복 쿼리를 피하는 데 도움이됩니다 [6].

중첩 된 관계와 함께`loadmissing '사용

-

loadmissing ''과 같은 닷 표어에 중첩 된 관계를 지정하여 중첩 관계가 누락 된 경우에만 중첩 된 관계를로드하려면 [7].
- 그러나 이미로드 된 관계의 중첩 된 관계를 '로드 중재'하면 Laravel이 부모 관계 자체를 다시로드 할 수있는 알려진 동작이 있습니다. 예를 들어, 이미 모델에 '비문'을 이미로드 한 경우`rodmissing ( 'inscriptions.nestedRelation')을 호출하면 '비문'관계가 완전히 다시로드되게됩니다 [1].
- 이는`로드 메이징 '이 중첩 관계를 지원하는 동안, 이전에로드되었지만 중첩 관계가없는 경우 중간 관계의 재 장전을 트리거 할 수 있음을 의미합니다.

실제 고려 사항

-`loadmissing '은 조건부로 열망하는로드 관계를 원할 때 유용하여 관계가 이미로드 된 경우 중복 쿼리를 방지합니다.
- 중첩 관계의 경우, 이전에로드 된 부모 관계에서 누락 된 중첩 관계를로드하면 부모 관계가 다시로드 될 수 있으며, 이는 성능에 영향을 줄 수 있음을 알고 있어야합니다.
- 그러한 재 장전을 피하려면 중첩 관계를로드시기와 방법을 신중하게 관리하거나 ()`with ()`with () with`with`with () with`with`with`with '.

요약

- 예,`로드 메소싱 '은 도트 표기법을 사용하여 중첩 관계와 함께 사용할 수 있습니다.
- 중첩 된 관계가 누락 된 경우에만로드됩니다.
- 그러나 부모 관계가 중첩 된 관계없이로드되면, '로드 머싱'은 부모 관계를 다시로드하여 중첩 된 데이터를 가져올 수 있습니다 [1] [6] [7].

이 동작은 Laravel에서 중첩 된 열성적인 하중으로 작업 할 때 예상치 못한 다중 쿼리를 피하기 위해 명심해야합니다.

인용 :
[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-nested-queries-relationships-practices/
[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-loadmissing-function
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eger-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