Da, „LoadMissing” poate fi utilizat cu relații cuibărite în Laravel, dar există unele nuanțe de care trebuie să fii conștient.
Ce este „LoadMissing”?
Metoda „LoadMissing” în Laravel Elocvent este folosită pentru relațiile de încărcare dornice doar dacă nu au fost deja încărcate pe instanța modelului. Acest lucru ajută la evitarea întrebărilor redundante verificând dacă datele relației sunt deja prezente înainte de a interoga din nou baza de date [6].
Folosind `LoadMissing` cu relații cuibărite
- Puteți specifica relațiile cuibărite în notație punct cu „LoadMissing”, cum ar fi `'autorul.contacts'`, pentru a încărca o relație cuibărită numai dacă lipsește [7].
- Cu toate acestea, există un comportament cunoscut în cazul în care dacă „LoadMissing” o relație cuibărită a unei relații care este deja încărcată, Laravel poate reîncărca relația părinte în sine. De exemplu, dacă ați încărcat deja „inscripții” pe un model, atunci apelarea „LoadMissing (” Inscripție.NestedRelation ') `va provoca relația„ Inscripții ”cu reîncărcare în întregime [1].
- Aceasta înseamnă că, în timp ce „LoadMissing” sprijină relațiile cuibărit, poate declanșa reîncărcarea relațiilor intermediare dacă au fost încărcate anterior, dar fără relația cuibărită.
Considerații practice
- `LoadMissing` este util atunci când doriți să faceți relații de încărcare dornice condiționat, împiedicând întrebările duplicate dacă relația este deja încărcată.
- Pentru relațiile cuibărite, ar trebui să fiți conștienți de faptul că încărcarea unei relații cuibărite lipsite dintr -o relație părinte încărcată anterior poate provoca relația părinte cu reîncărcarea, ceea ce poate afecta performanța.
- Dacă doriți să evitați astfel de reîncărcări, este posibil să fiți nevoie să gestionați cu atenție când și modul în care încărcați relații cuibărite sau luați în considerare dorința de încărcare a acestora în avans cu `cu ()`.
Rezumat
- Da, „LoadMissing” poate fi utilizat cu relații cuibărite folosind notarea punctului.
- Încarcă relațiile cuibărite numai dacă lipsesc.
- Dar dacă relația părinte este încărcată fără relația cuibărită, „LoadMissing” poate reîncărca relația părinte pentru a obține datele cuibărite [1] [6] [7].
Acest comportament este important de reținut pentru a evita interogări multiple neașteptate atunci când lucrați cu încărcarea dornică cuibărită în Laravel.
Citări:
[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-relationships-preractices/
[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-funcție
[7] https://stackoverflow.com/questions/35490728/laravel-eloqucent-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-client/queries/relation-queries