Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Можно ли использовать загрузку с вложенными отношениями


Можно ли использовать загрузку с вложенными отношениями


Да, «LoadMissing» может использоваться с вложенными отношениями в Ларавеле, но есть некоторые нюансы, о которых следует знать.

Что такое `loadmissing`?

Метод `LoadMissing» в Eloврант Laravel используется для нетерпеливых отношений нагрузки только в том случае, если они еще не были загружены в экземпляр модели. Это помогает избежать избыточных запросов, проверяя, присутствуют ли данные об отношениях, прежде чем снова запросить базу данных [6].

Использование `LoadMissing` с вложенными отношениями

- Вы можете указать вложенные отношения в точечных обозначениях с «LoadMissing», такими как `'author.Contacts', чтобы загрузить вложенные отношения, только если он отсутствует [7].
- Тем не менее, существует известное поведение, когда, если вы «загружаете» вложенное соотношение отношения, которое уже загружается, Laravel может перезагрузить само родительское отношение. Например, если вы уже загрузили «надписи» на модель, то вызов «LoadMissing» ('inscriptions.nestedRelation') `вызовет отношение« надписи »к полностью перезагрузке [1].
- Это означает, что в то время как «LoadMissing» поддерживает вложенные отношения, это может вызвать перезагрузку промежуточных отношений, если они были ранее загружены, но без вложенного отношения.

Практические соображения

- `LoadMissing` полезно, когда вы хотите условно нетерпеливые отношения нагрузки, предотвращая дублирующие запросы, если соотношение уже загружено.
- Для вложенных отношений вы должны знать, что загрузка вложенного отношения, отсутствующего в ранее загруженном родительском соотношении, может привести к тому, что родительское отношение к перезагрузке, что может повлиять на производительность.
- Если вы хотите избежать таких перезагрузков, вам может потребоваться тщательно управлять, когда и как вы загружаете вложенные отношения или рассмотрите возможность загрузки их заранее с помощью () `.

Краткое содержание

- Да, `LoadMissing` может использоваться с вложенными отношениями с использованием точечных обозначений.
- Это загружает вложенные отношения только в том случае, если они отсутствуют.
- Но если родительское отношение загружается без вложенного отношения, «LoadMissing» может перезагрузить родительское отношение, чтобы получить вложенные данные [1] [6] [7].

Такое поведение важно иметь в виду, чтобы избежать неожиданных многочисленных запросов при работе с вложенной нетерпеливой загрузкой в ​​Ларавеле.

Цитаты:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nested-realation-ingraphql
[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-ororm-cookbook/001-how-to-load-nested-relation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-purpose-of-the-loadmissing-функция
[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