Ja, "Loadmissing" kan användas med kapslade relationer i Laravel, men det finns några nyanser att vara medvetna om.
Vad är "Load Missing"?
Metoden "Loadmissing" i Laravel Ealoquent används endast för att ivriga relationer om de inte redan har laddats på modellinstansen. Detta hjälper till att undvika redundanta frågor genom att kontrollera om relationsdata redan finns innan du frågar databasen igen [6].
Använda "Load Missing" med kapslade relationer
- Du kan specificera kapslade förhållanden i pricknotation med "belastning", som `'author.contacts' ', för att ladda en kapslad relation endast om den saknas [7].
- Det finns emellertid ett känt beteende där om du "laddar som missar" en kapslad relation mellan en relation som redan är laddad, kan Laravel ladda om moderförhållandet själv. Om du till exempel redan har laddat "inskriptioner" på en modell, kommer att kalla "LoadMissing (" inskription.nestedrelation ")" kommer att orsaka "inskriptioner" -förhållandet till omlastning helt [1].
- Detta innebär att medan "Loadmissing" stöder kapslade relationer, kan det utlösa omlastning av mellanförhållandena om de tidigare laddades men utan den kapslade relationen.
Praktiska överväganden
- "Loadmissing" är användbart när du vill villkorligt ivriga belastningsförhållanden, förhindra duplicerade frågor om relationen redan är laddad.
- För kapslade relationer bör du vara medveten om att att ladda en kapslad relation som saknas i en tidigare laddad förälderrelation kan orsaka förälderförhållandet till omlastning, vilket kan påverka prestanda.
- Om du vill undvika sådana omladdningar, kan du behöva hantera noggrant när och hur du laddar kapslade relationer eller överväger ivriga att ladda dem i förväg med `med ()`.
Sammanfattning
- Ja, "Loadmissing" kan användas med kapslade förhållanden med pricknotering.
- Det laddar bara de kapslade relationerna om de saknas.
- men om moderförhållandet laddas utan den kapslade relationen, kan "belastning" ladda om moderförhållandet för att hämta de kapslade uppgifterna [1] [6] [7].
Detta beteende är viktigt att komma ihåg att undvika oväntade flera frågor när man arbetar med kapslad ivrig belastning i Laravel.
Citeringar:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nested-relation-caphql
]
[4] https://github.com/fifemon/graphql-datasource/issues/15
]
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-purpose-of-loadmissing-function
]
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries