Sì, `Loadmissing` può essere usato con relazioni nidificate in Laravel, ma ci sono alcune sfumature di cui essere consapevoli.
Cosa sta `Loadmissing`?
Il metodo `Loadmissing" in Laravel Eloquent viene utilizzato per essere ansiose relazioni di carico solo se non sono già stati caricati sull'istanza del modello. Ciò aiuta a evitare le query ridondanti verificando se i dati della relazione sono già presenti prima di interrogare nuovamente il database [6].
usando `loadmissing` con relazioni nidificate
- È possibile specificare le relazioni nidificate nella notazione del punto con `Loadmissing`, come` 'Author.Contacts'`, per caricare una relazione nidificata solo se manca [7].
- Tuttavia, esiste un comportamento noto in cui se si è "caricando" una relazione nidificata di una relazione che è già caricata, Laravel può ricaricare la stessa relazione genitore. Ad esempio, se hai già caricato `iscrizioni` su un modello, chiamando` LoadMissing ('Iscrizioni.NelestAlazione') `causerà la relazione` Iscrizioni 'per ricaricare completamente [1].
- Ciò significa che mentre "Loadmissing" supporta le relazioni nidificate, può innescare il ricarico delle relazioni intermedie se sono state precedentemente caricate ma senza la relazione nidificata.
considerazioni pratiche
- `Loadmissing` è utile quando si desidera relazioni di carico condizionatamente ansiose, prevenendo query duplicate se la relazione è già caricata.
- Per le relazioni nidificate, dovresti essere consapevole del fatto che il caricamento di una relazione nidificata mancante da una relazione genitore precedentemente caricata può causare la relazione genitore alla ricarica, che può influire sulle prestazioni.
- Se si desidera evitare tali ricarichi, potrebbe essere necessario gestire attentamente quando e come si carica le relazioni nidificate o considerare il caricarle desiderose di `con ()`.
Riepilogo
- Sì, `Loadmissing` può essere usato con relazioni nidificate usando la notazione punto.
- Carica le relazioni nidificate solo se mancano.
- ma se la relazione genitore viene caricata senza la relazione nidificata, `Loadmissing` può ricaricare la relazione genitore per recuperare i dati nidificati [1] [6] [7].
Questo comportamento è importante da tenere a mente per evitare domande multiple inaspettate quando si lavora con carichi ansiosi nidificati in Laravel.
Citazioni:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nestest-relation-in-graphql
[3] https://compositecode.blog/2023/07/25/graphql-nestest-queries-relationships-practices/
[4] https://github.com/fifemon/graphql-datasource/issues/15
[5] https://www.sea-ql.org/sea-orm-cookbook/001-how-to-moad-fread-relation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-purpose-of-the-loadmissing-function
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eager-loading-of-mulpleple-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