Tak, „ładowanie” można stosować z zagnieżdżonymi relacjami w Laravel, ale są pewne niuanse, o których należy pamiętać.
Co to jest „Loadmissing”?
Metoda „loadmissing” w elokwentach laravel jest używana do chętnej relacji obciążenia tylko wtedy, gdy nie zostały one jeszcze załadowane na instancję modelu. Pomaga to uniknąć zbędnych zapytań, sprawdzając, czy dane dotyczące relacji są już obecne przed ponownym zapytaniem bazy danych [6].
za pomocą „Loadmissing” z zagnieżdżonymi relacjami
- Możesz określić zagnieżdżone relacje w notacji DOT za pomocą „Loadmissing”, takie jak „Autor.contacts”, aby załadować zagnieżdżony związek tylko wtedy, gdy jej brakuje [7].
- Istnieje jednak znane zachowanie, w którym jeśli „załadujesz” zagnieżdżoną relację relacji, która jest już załadowana, Laravel może ponownie załadować samą relację nadrzędną. Na przykład, jeśli załadowałeś już „Inskrypcje” w modelu, wówczas wywoływanie „załadowania („ Inskrypcje. NeededRation ”)„ spowoduje relację „Inskrypcji” do całkowitego przeładowania [1].
- Oznacza to, że chociaż „ładowanie” obsługuje relacje zagnieżdżone, może wywołać przeładowanie relacji pośrednich, jeśli były one wcześniej załadowane, ale bez zagnieżdżonej relacji.
Rozważania praktyczne
- `` Loadmissing 'jest przydatne, gdy chcesz warunkowo chętny do obciążenia, zapobiegając zduplikowanym zapytaniom, jeśli relacja jest już załadowana.
- W przypadku zagnieżdżonych relacji powinieneś pamiętać, że załadowanie zagnieżdżonej relacji brakującej w poprzednio załadowanej relacji nadrzędnej może powodować stosunek rodziców do przeładowania, co może wpłynąć na wydajność.
- Jeśli chcesz uniknąć takich przeładowań, może być konieczne starannie zarządzać, kiedy i jak ładujesz zagnieżdżone relacje lub rozważasz chętne załadowanie ich z góry z () z () `.
Streszczenie
- Tak, `` Loadmissing 'może być używane z zagnieżdżonymi relacjami za pomocą notacji kropkowej.
- Ładuje zagnieżdżone relacje tylko wtedy, gdy ich brakuje.
- ale jeśli relacja nadrzędna jest ładowana bez zagnieżdżonej relacji, „ładowanie” może ponownie załadować stosunek nadrzędny w celu pobrania zagnieżdżonych danych [1] [6] [7].
To zachowanie jest ważne, aby pamiętać, aby uniknąć nieoczekiwanych wielokrotnych zapytań podczas pracy z zagnieżdżonym chętnym ładowaniem w Laravel.
Cytaty:
[1] https://github.com/laravele/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-the-loadmissing-function
[7] https://stackoverflow.com/questions/35490728/Laravele-Eloquent-eager-loading-of-Multiple-nested-relationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-lint/queries/relation-queries