Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Μπορεί να χρησιμοποιηθεί φορτωμένο με ένθετες σχέσεις


Μπορεί να χρησιμοποιηθεί φορτωμένο με ένθετες σχέσεις


Ναι, το `loadmissing` μπορεί να χρησιμοποιηθεί με ένθετες σχέσεις στο Laravel, αλλά υπάρχουν κάποιες αποχρώσεις που πρέπει να γνωρίζετε.

Τι είναι το `loadmissing`;

Η μέθοδος `loadmissing` στο Laravel Ecoquent χρησιμοποιείται για τις πρόθυμες σχέσεις φορτίου μόνο εάν δεν έχουν ήδη φορτωθεί στην παρουσία του μοντέλου. Αυτό βοηθά στην αποφυγή περιττών ερωτημάτων ελέγχοντας εάν τα δεδομένα σχέσεων υπάρχουν ήδη πριν από την ερώτηση της βάσης δεδομένων [6].

Χρήση `loadmissing` με ένθετες σχέσεις

- Μπορείτε να καθορίσετε τις ένθετες σχέσεις σε σημείωση DOT με `loadmissing ', όπως`' author.contacts '', για να φορτώσετε μια ένθετη σχέση μόνο αν λείπει [7].
- Ωστόσο, υπάρχει μια γνωστή συμπεριφορά όπου, αν «loadmissing» μια ένθετη σχέση μιας σχέσης που έχει ήδη φορτωθεί, ο Laravel μπορεί να φορτώσει ξανά την ίδια τη γονική σχέση. Για παράδειγμα, εάν έχετε ήδη φορτώσει `επιγραφές 'σε ένα μοντέλο, τότε καλώντας το` loadMissing (' quctives.nestedrelation ') `θα προκαλέσει τη σχέση` ​​επιγραφές' να επαναφορτώσει εξ ολοκλήρου [1].
- Αυτό σημαίνει ότι ενώ το `loadmissing` υποστηρίζει ένθετες σχέσεις, μπορεί να προκαλέσει επαναφόρτωση των ενδιάμεσων σχέσεων εάν είχαν φορτωθεί προηγουμένως αλλά χωρίς την ένθετη σχέση.

Πρακτικές σκέψεις

- `loadmissing` είναι χρήσιμο όταν θέλετε να προκληθούν προϋποθέσεις για τις σχέσεις φορτίου, αποτρέποντας τα διπλά ερωτήματα εάν η σχέση έχει ήδη φορτωθεί.
- Για τις ένθετες σχέσεις, θα πρέπει να γνωρίζετε ότι η φόρτωση μιας ένθετης σχέσης που λείπει από μια προηγούμενη σχέση γονικής σχέσης μπορεί να προκαλέσει την επαναφόρτωση της γονικής σχέσης, η οποία μπορεί να επηρεάσει την απόδοση.
- Εάν θέλετε να αποφύγετε τέτοιες επαναφορτίσεις, ίσως χρειαστεί να διαχειριστείτε προσεκτικά πότε και πώς φορτώνετε ένθετες σχέσεις ή θεωρήστε ότι οι πρόθυμοι να τους φορτώσουν εκ των προτέρων με `με ()`.

Περίληψη

- Ναι, το `loadmissing` μπορεί να χρησιμοποιηθεί με ένθετες σχέσεις χρησιμοποιώντας τη σημείωση DOT.
- φορτώνει μόνο τις ένθετες σχέσεις εάν λείπουν.
- Αλλά αν η γονική σχέση φορτωθεί χωρίς την ένθετη σχέση, το `loadmissing` μπορεί να επαναφορτώσει τη γονική σχέση για να φέρει τα ένθετα δεδομένα [1] [6] [7].

Αυτή η συμπεριφορά είναι σημαντική για να έχετε κατά νου για να αποφύγετε απροσδόκητα πολλαπλά ερωτήματα όταν εργάζεστε με ένθετη πρόθυμη φόρτωση στο Laravel.

Αναφορές:
[1] https://github.com/laravel/framework/issues/23027
[2] https://stackoverflow.com/questions/62563063/filtering-a-nestes-relation-in-graphql
[3] https://compositecode.blog/2023/07/25/graphql-nesting-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-selation.html
[6] https://stackoverflow.com/questions/47238937/laravel-what-is-the-thpurpose-of-the-loadmissing-ffunction
[7] https://stackoverflow.com/questions/35490728/laravel-eloquent-eager-loading-of-multiple-nes-relationships/53205641
[8] https://docs.sqlalchemy.org/14/orm/loading_relationships.html
[9] https://www.prisma.io/docs/orm/prisma-client/queries/relation-queries