Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Může být načtení použity s vnořenými vztahy


Může být načtení použity s vnořenými vztahy


Ano, `loadmissing` lze použít s vnořenými vztahy v Laravelu, ale existují některé nuance.

Co je `loadmissing`?

Metoda „Loadmissing“ v Laravel Eloquent se používá k dychtivému načítání vztahů pouze tehdy, pokud již nebyly načteny v instanci modelu. To pomáhá vyhnout se redundantním dotazům kontrolou, zda jsou vztahové údaje již přítomny před dotazem na databázi [6].

Používání `LoadMissing` s vnořenými vztahy

- Vnořené vztahy můžete zadat v notaci DOT pomocí `LoadMissing`, jako je` 'autor.contacts'`, načíst vnořený vztah, pouze pokud chybí [7].
- Existuje však známé chování, kde pokud „zatížení“ vnořený vztah vztahu, který je již načten, může Laravel znovu načíst rodičovský vztah sám. Například, pokud jste již naložili „nápisy“ na model, pak volání `loadmissing ('inscriptions.NestRelation')` způsobí vztah „nápisy“, aby se zcela načtěly [1].
- To znamená, že zatímco `loadmissing` podporuje vnořené vztahy, může to vyvolat opětovné načtení mezilehlých vztahů, pokud byly dříve načteny, ale bez vnořeného vztahu.

Praktické úvahy

- `LoadMissing` je užitečný, pokud chcete podmíněně dychtivé zatížení vztahů a zabrání duplicitním dotazům, pokud je vztah již načten.
- Pro vnořené vztahy byste si měli být vědomi toho, že načtení vnořeného vztahu chybějícího z dříve naloženého rodičovského vztahu může způsobit opětovné načtení rodičovského vztahu, což může ovlivnit výkon.
- Pokud se těmto načtením chcete vyhnout, možná budete muset pečlivě spravovat, kdy a jak načtete vnořené vztahy nebo zvažte dychtivé načítání předem `s ()`.

Shrnutí

- Ano, `loadmissing` lze použít s vnořenými vztahy pomocí zápisu dot.
- Načíst vnořené vztahy pouze tehdy, pokud chybí.
- Ale pokud je rodičovský vztah načten bez vnořeného vztahu, může „zatížení“ znovu načíst rodičovský vztah k načtení vnořených dat [1] [6] [7].

Toto chování je důležité mít na paměti, aby se zabránilo neočekávaným více dotazům při práci s vnořeným dychtivým zatížením v Laravelu.

Citace:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nost-relation-in-graphql
[3] https://compositecode.blog/2023/07/25/Graphql-nost-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-noded-relation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-the-s-thethe-thethe-loadmissing-Function
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eager-loading-of-multiple-noste-relationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/load_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries