Η μέθοδος `Whenloaded ()` στο Laravel έχει σχεδιαστεί ειδικά για να συνεργάζεται με τις εύγλωττες σχέσεις μοντέλων. Περιλαμβάνει υπό όρους δεδομένα σχέσεων σε απαντήσεις πόρων API μόνο εάν η σχέση έχει φορτωθεί με το μοντέλο. Αυτή η μέθοδος βοηθά στην αποφυγή περιττών ερωτήσεων βάσης δεδομένων και διατηρεί τις απαντήσεις API που ακουμπούν μόνο, συμπεριλαμβανομένων σχετικών δεδομένων όταν είναι στην πραγματικότητα φορτωμένο.
Πλαίσιο χρήσης του `όταν φορτώνεται ()`
- εύγλωττα μοντέλα και σχέσεις: `όταν φορτώνεται ()` Ελέγχει εάν μια σχέση σε ένα εύγλωττο μοντέλο έχει φορτωθεί χρησιμοποιώντας μεθόδους όπως `με ()` ή `load ()`. Εάν η σχέση φορτωθεί, επιστρέφει τα σχετικά δεδομένα. Διαφορετικά, δεν επιστρέφει τίποτα ή μια προεπιλεγμένη τιμή. Αυτή η συμπεριφορά συνδέεται στενά με την εσωτερική μέθοδο της Ecoquent `reloadeded ()` που καθορίζει εάν τα δεδομένα σχέσεων είναι διαθέσιμα στην παρουσία του μοντέλου [1] [7] [8].
- Πόροι API: Χρησιμοποιείται συνήθως μέσα στις κατηγορίες πόρων API Laravel για να συμπεριλάβει τους σχετικούς πόρους ή τις συλλογές με βάση το αν οι σχέσεις ήταν πρόθυμοι φορτωμένες, βελτιώνοντας την απόδοση και αποφεύγοντας το πρόβλημα ερωτήματος N+1 [1] [8].
μπορεί να χρησιμοποιηθεί με τις βιβλιοθήκες τρίτων;
- Δεν υπάρχει άμεση υποστήριξη εκτός των εύγλωττων μοντέλων: Δεδομένου ότι «όταν φορτώνεται ()« βασίζεται στην εσωτερική κατάσταση του εύγλωττου μοντέλου για να ελέγξει εάν έχει φορτωθεί μια σχέση (`relocloaded ()` μέθοδος), είναι εγγενώς σχεδιασμένο για εύγλωττα μοντέλα και τις σχέσεις τους. Βιβλιοθήκες τρίτων που δεν επεκτείνουν ή μιμούνται τα εύγλωττα μοντέλα και οι μηχανισμοί φόρτωσης της σχέσης τους δεν μπορούν να χρησιμοποιήσουν άμεσα `όταν φορτώνονται ()`.
-Εναλλακτικές λύσεις: Εάν μια βιβλιοθήκη τρίτου μέρους επιστρέφει αντικείμενα ή συλλογές που δεν είναι εύγλωττα μοντέλα, δεν μπορείτε να χρησιμοποιήσετε το "Whenloaded ()` as-is. Θα χρειαστεί να εφαρμόσετε παρόμοια λογική υπό όρους με μη αυτόματο τρόπο ή να τυλίξετε αυτά τα αντικείμενα σε έναν προσαρμοσμένο πόρο που μιμείται τη συμπεριφορά. Εναλλακτικά, θα μπορούσατε να ελέγξετε με μη αυτόματο τρόπο εάν υπάρχουν τα σχετικά δεδομένα πριν να το συμπεριλάβετε στην απάντηση.
Περίληψη
- `Όταν φορτώνεται ()` είναι κατασκευασμένο για να λειτουργεί αποκλειστικά με εύγλωττα μοντέλα και τις φορτωμένες σχέσεις τους.
- Εξαρτάται από την κατάσταση φόρτωσης εσωτερικής σχέσης του Emoquent, οπότε δεν μπορεί να χρησιμοποιηθεί απευθείας με βιβλιοθήκες τρίτων που δεν χρησιμοποιούν εύγλωττα μοντέλα.
- Για να συμπεριλάβετε υπό όρους δεδομένα από πηγές τρίτων, πρέπει να εφαρμόσετε τους δικούς σας υπό όρους ελέγχους ή περιτυλίγματα πόρων.
Αυτό καθιστά το "Whenloaded ()` ένα ισχυρό εργαλείο για τη βελτιστοποίηση των απαντήσεων API Laravel, αλλά περιορίζεται στο εύγλωττο πλαίσιο ORM [1] [7] [8].
Αναφορές:
[1] https://henestrosa.dev/blog/how-to-use-whenloaded-in-laravel-api-resources
[2] https://laracasts.com/discuss/channels/laravel/api-resource-using-count-with-whenloaded
[3] https://laravel.com/docs/12.x/eloquent-resources
[4] https://stackoverflow.com/questions/76828050/how-to-get-a-single-field-from-a-laravel-whenloaded-resource
[5] https://www.youtube.com/watch?v=LS7M14ECASU
[6] https://stackoverflow.com/questions/66675594/can-i-use-with-instead-load-laravel-eloquent
[7] https://laraveldaily.com/post/laravel-api-resources-relations-when-methods
[8] https://laravel-news.com/whenloaded