Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kan loadmissing bruges med indlejrede forhold


Kan loadmissing bruges med indlejrede forhold


Ja, 'LoadMissing' kan bruges med indlejrede forhold i Laravel, men der er nogle nuancer at være opmærksomme på.

Hvad er 'LoadMissing'?

Metoden 'LoadMissing' i Laravel Welloquent bruges kun til ivrige belastningsforhold, hvis de ikke allerede er indlæst på modelinstansen. Dette hjælper med at undgå overflødige forespørgsler ved at kontrollere, om forholdsdataene allerede er til stede, før du spørger databasen igen [6].

ved hjælp af 'LoadMissing' med indlejrede forhold

- Du kan specificere indlejrede forhold i prik -notation med `LoadMissing ', såsom`' forfatter.contacts ', for kun at indlæse et indlejret forhold, hvis det mangler [7].
- Der er dog en kendt opførsel, hvor hvis du 'loadmissing' en indlejret relation til en relation, der allerede er indlæst, kan Laravel muligvis genindlæse selve overordnede forholdet. For eksempel, hvis du allerede har indlæst 'inskriptioner' på en model, så kalder du 'loadMissing (' inskriptions.nestedrelation ')' forårsager 'inskriptioner' forholdet til at genindlæse helt [1].
- Dette betyder, at selvom 'LoadMissing' understøtter indlejrede relationer, kan det udløse genindlæsning af mellemrelationer, hvis de tidligere var indlæst, men uden den indlejrede relation.

Praktiske overvejelser

- 'LoadMissing' er nyttigt, når du vil betinget ivrige belastningsforhold, hvilket forhindrer duplikatforespørgsler, hvis forholdet allerede er indlæst.
- For indlejrede forhold skal du være opmærksom på, at indlæsning af en indlejret relation, der mangler i en tidligere belastet forældrelation, kan forårsage, at forælderforholdet er til at genindlæse, hvilket kan påvirke ydeevnen.
- Hvis du vil undgå sådanne genindlæsninger, skal du muligvis omhyggeligt klare, hvornår og hvordan du indlæser indlejrede relationer eller overvejer ivrige indlæsning af dem på forhånd med `med ()`.

Resume

- Ja, 'LoadMissing' kan bruges med indlejrede forhold ved hjælp af DOT -notation.
- Det indlæser kun de indlejrede forhold, hvis de mangler.
- Men hvis overordnet relation indlæses uden den indlejrede relation, kan 'LoadMissing' muligvis genindlæse overordnet relation for at hente de indlejrede data [1] [6] [7].

Denne opførsel er vigtig for at huske på at undgå uventede flere forespørgsler, når man arbejder med indlejret ivrig belastning i Laravel.

Citater:
[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-relationship-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-the-loadmissing-funktion
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-ease-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