De methode `Whenloaded ()` in Laravel is specifiek ontworpen om te werken met welsprekende modelrelaties. Het bevat voorwaardelijk relatiegegevens in API -resource -reacties alleen als de relatie enthousiast is geladen op het welsprekende model. Deze methode helpt onnodige databasevragen te voorkomen en houdt API -reacties door alleen door gerelateerde gegevens op te nemen wanneer deze daadwerkelijk worden geladen.
Gebruikscontext van `Whenloaded ()`
- Eloquente modellen en relaties: `Whenloaded ()` Controleert of een relatie op een welsprekend model is geladen met methoden zoals `met ()` of `load ()`. Als de relatie wordt geladen, retourneert deze de gerelateerde gegevens; Anders retourneert het niets of een standaardwaarde. Dit gedrag is strak gekoppeld aan de interne methode van Eloquent `RelationLoaded ()` die bepaalt of de relatiegegevens beschikbaar zijn in de modelinstantie [1] [7] [8].
- API -bronnen: het wordt vaak gebruikt in Laravel API -resource -klassen om voorwaardelijk gerelateerde bronnen of collecties op te nemen op basis van of de relaties enthousiast waren geladen, de prestaties verbeteren en het N+1 -queryprobleem vermijden [1] [8].
kan `wanneer geladen ()` worden gebruikt met bibliotheken van derden?
- Geen directe ondersteuning buiten Eloquent -modellen: aangezien `WhenLoaded ()` afhankelijk is van de interne status van het welsprekende model om te controleren of een relatie wordt geladen (`RelationLoaded ()` methode), is deze inherent ontworpen voor welsprekende modellen en hun relaties. Bibliotheken van derden die geen welsprekende modellen uitbreiden of nabootsen en hun relatielaadmechanismen kunnen niet direct `wanneer geladen ()` gebruiken.
-Tijdelijke oplossingen: als een bibliotheek van derden objecten of collecties retourneert die geen welsprekende modellen zijn, kunt u niet gebruiken `wanneer geladen ()` as-is. U zou vergelijkbare voorwaardelijke logica handmatig moeten implementeren of die objecten in een aangepaste bron verpakken die het gedrag nabootst. Als alternatief kunt u handmatig controleren of de gerelateerde gegevens aanwezig zijn voordat u deze in de reactie opneemt.
Samenvatting
- `Whenloaded ()` is gebouwd om uitsluitend te werken met welsprekende modellen en hun geladen relaties.
- Het hangt af van de interne relatietoestand van Eloquent, dus het kan niet rechtstreeks worden gebruikt met bibliotheken van derden die geen welsprekende modellen gebruiken.
- Om voorwaardelijk gerelateerde gegevens van bronnen van derden op te nemen, moet u uw eigen voorwaardelijke controles of bronnenverpakkingen implementeren.
Dit maakt `WhoLoaded ()` een krachtig hulpmiddel voor het optimaliseren van Laravel API -reacties maar beperkt tot de welsprekende ORM -context [1] [7] [8].
Citaten:
[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-when
[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-reesources-relations-when-methoden
[8] https://laravel-news.com/whenloaded